網(wǎng)關(guān)升級項目介紹
需要向嵌入式拷入新的程序定硝,我們采用mqtt協(xié)議淀零,寫一個前端程序完成發(fā)送二進制代碼的過程。
參考的代碼是:http://www.reibang.com/p/1f8467093d7f
遇到的問題
mqtt.js已經(jīng)被打包成browser能使用的js包,因為參考給的mqttjs版本太老了宵晚,我們換了新的
下載地址:https://gist.github.com/analog-io/efb25a9b00b1d1b38c12
mqtt的client.publish的參數(shù)只支持String類和Buffer類。String類的數(shù)據(jù)測試成功字逗,但是實際中為了節(jié)省空間我們發(fā)送的是二進制字節(jié)流鸠按,所以我們必須要用Buffer。
因為Buffer是node包的類型宙搬,我們嘗試用js的bufferArray和Unit8Array笨腥,但是報錯了。PS: 雖然有看到最新browsermqtt支持Unit8Array勇垛,也沒有報錯脖母,但是服務(wù)器并沒有收到數(shù)據(jù)。
解決辦法——Browserify對nodejs的module做打包
方法一:https://www.npmjs.com/package/buffer
但是失敗了闲孤,直接在js里使用Buffer類失敗谆级,原因可能是Buffer類被錯誤打包了(因為node本身就有buffer的module,可能有很多依賴讼积,我們需要的是獨立的)
方法二:
$ browserify -r buffer ./test.js > b2.js
test.js是原來的nodejs文件
var Buffer = require('buffer/').Buffer;
console.log('Got it');
module.exports = function(){
return buf = new Buffer(1);
};
生成可以為bs.js使用的js文件
前端代碼引用
<script src="./b2.js"></script>
var buf = require('buffer'); //nodejs寫法肥照,生成buf對象
var buf_instance = new buf.Buffer(2);//新建buf實例