Javascript 使用paho mqttws31.js接收二进制文件

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

我正在使用paho:lib连接到mqtt代理。 但当我通过WebSocket接收二进制数据时,它会说我的数据格式不正确: 错误:AMQJS0009E格式错误的UTF数据:d4-3f。 难道不能用paho mqttws31.js接收二进制文件吗

编辑:不幸的是,我使用了(message.payloadString)来获取收到的消息。 但据我所知()也可以使用message.payloadBytes

实际上我发送的是双字节,每个有8字节。 如何在message.payloadBytes中访问它们


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));
  }
};