网关升级项目介绍
需要向嵌入式拷入新的程序,我们采用mqtt协议,写一个前端程序完成发送二进制代码的过程。
参考的代码是:http://www.jianshu.com/p/1f8467093d7f
遇到的问题
mqtt.js已经被打包成browser能使用的js包,因为参考给的mqttjs版本太老了,我们换了新的
下载地址:https://gist.github.com/analog-io/efb25a9b00b1d1b38c12
mqtt的client.publish的参数只支持String类和Buffer类。String类的数据测试成功,但是实际中为了节省空间我们发送的是二进制字节流,所以我们必须要用Buffer。
因为Buffer是node包的类型,我们尝试用js的bufferArray和Unit8Array,但是报错了。PS: 虽然有看到最新browsermqtt支持Unit8Array,也没有报错,但是服务器并没有收到数据。
解决办法——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实例
网友评论