使用paho mqttws31.js接收二进制文件
Receive binary with paho mqttws31.js
我正在使用paho:http://www.eclipse.org/paho/clients/js/lib连接到mqtt代理。但当我通过websocket接收二进制数据时,它会说我的数据格式错误:错误:AMQJS0009E格式不正确的UTF数据:d4-3f。是不是可以用paho mqttws31.js 接收二进制
编辑:不幸的是,我使用了(message.payloadString)来获取收到的消息。但据我所知(https://github.com/i5ting/paho.mqtt.javascript/blob/master/src/mqttws31.js#L2060)也可以使用message.payloadBytes.
所以实际上我发送的是Double,每个都有8字节。如何在message.payloadBytes中访问它们?
Thx。
您可能想看看这个:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays
由此看来,你应该能够做这样的事情:
var payload = message.payloadByte()
var doubleView = new Float64Array(payload);
var number = doubleView[0];
这假设消息的有效载荷是单个64位IEEE浮点数
另一个可能的选择是看看前面这个问题的答案:
JS 中浮点的读/写字节
编辑:
以下代码适用于我:
function onMessageArrived(message) {
var payload = message.payloadBytes
var length = payload.length;
var buffer = new ArrayBuffer(length);
uint = new Uint8Array(buffer);
for (var i=0; i<length; i++) {
uint[(length-1)-i] = payload[i];
}
var doubleView = new Float64Array(uint.buffer);
var number = doubleView[0];
console.log("onMessageArrived:"+number);
};
请注意,我必须颠倒字节顺序才能得到正确的输出。
编辑2
这样做效果更好,可以解码任意长度的双打数组:
function onMessageArrived(message) {
var payload = message.payloadBytes
var length = payload.length;
var buffer = new ArrayBuffer(length);
uint = new Uint8Array(buffer);
for (var i=0; i<length; i++) {
uint[i] = payload[i];
}
var dataView = new DataView(uint.buffer);
for (var i=0; i<length/8; i++) {
console.log(dataView.getFloat64((i*8), false));
}
};
(您可能需要在dataView.getFloat64()的末尾将false翻转为true,具体取决于发送平台的端序)
我为走到这一步而写的代码的完整内容可以在这里找到:http://www.hardill.me.uk/wordpress/2014/08/29/unpacking-binary-data-from-mqtt-in-javascript/
- 如何将PDF作为二进制文件传递到window.open()
- 如何在Windows中将Javascript文件编译成二进制文件
- 在Internet Explorer中从二进制文件打开PDF
- 如何使用JavaScript粘贴原始二进制文件而不出现“无效字符”错误
- 从文本文件js中读取列表
- 使用JavaScript从二进制文件中读取字节,而不使用jQuery
- 使用 node.js 从 Google 云端硬盘读取二进制文件
- 使用 JQuery 读取二进制文件的浏览器之间的不同行为
- 如何获取 CasperJS 请求的图像的二进制文件
- 当我用ctrl+p搜索时,为什么要在谷歌chrome上使用inspect来调试缺少显示文件js
- 使用 Node.js 执行命令行二进制文件
- 将用JavaScript生成的二进制文件保存到iPad
- 获取用于外部JavaScript文件(.js)的代码提示
- 从二进制文件流式传输 JS
- HTML5文件api和octokit.js以及二进制文件
- 如何通过angular.js下载HTTP:POST请求返回的二进制文件
- 使用paho mqttws31.js接收二进制文件
- 是否有可能将整个网页存储在单个二进制文件中,并使用JS显示网站
- 解析客户端JS中的二进制文件
- 在Node.js中解析巨大的二进制文件