Javascript 使用paho mqttws31.js接收二进制文件
我正在使用paho:lib连接到mqtt代理。 但当我通过WebSocket接收二进制数据时,它会说我的数据格式不正确: 错误:AMQJS0009E格式错误的UTF数据:d4-3f。 难道不能用paho mqttws31.js接收二进制文件吗 编辑:不幸的是,我使用了(message.payloadString)来获取收到的消息。 但据我所知()也可以使用message.payloadBytes 实际上我发送的是双字节,每个有8字节。 如何在message.payloadBytes中访问它们Javascript 使用paho mqttws31.js接收二进制文件,javascript,optimization,binary,mqtt,paho,Javascript,Optimization,Binary,Mqtt,Paho,我正在使用paho:lib连接到mqtt代理。 但当我通过WebSocket接收二进制数据时,它会说我的数据格式不正确: 错误:AMQJS0009E格式错误的UTF数据:d4-3f。 难道不能用paho mqttws31.js接收二进制文件吗 编辑:不幸的是,我使用了(message.payloadString)来获取收到的消息。 但据我所知()也可以使用message.payloadBytes 实际上我发送的是双字节,每个有8字节。 如何在message.payloadBytes中访问它们 T
Thx.您可能想看看这个: 从这个角度看,您应该能够执行以下操作:
var payload = message.payloadByte()
var doubleView = new Float64Array(payload);
var number = doubleView[0];
这假设消息的有效负载是单个64位IEEE浮点数
另一个可能的选择是查看前一个问题的答案:
编辑:
以下代码适用于我:
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);
};
消息驱动的函数(消息){
var payload=message.payloadBytes
var长度=有效载荷长度;
var buffer=新阵列缓冲区(长度);
uint=新的UINT8阵列(缓冲区);
对于(var i=0;看,我认为这是以下问题:我想将一个Uint8Array[256]转换为一个浮点数组,每个元素的长度为8字节。因此,它是一个长度为32个值的数组(256/8)每个值都是一个双精度浮点值,有8个字节。非常感谢。这是本地网络优化的一部分,我获得了20-30%的性能提升。因为与JSON.strinify(数据)相比,它大约是发送二进制数据的一半,对于在internet上传输的大量数据可能真的很好。但是我想知道这段代码是否也可以优化,因为它是两个for循环,并且保留了两倍的内存量。所以我想这是接收数据最有效的方法?
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));
}
};