Websocket 客户端到服务器发送 Float32Array - 我做错了什么

Websocket Client to Server sending a Float32Array - what am I doing wrong

我正在将类型化的 Float32Array 发送到节点 ws 服务器,但我得到的值与我发送的值非常不同。使用完全相同的数据,而使用 Uint8Array 一切都很好。

客户归结为如下内容:

client.connection.send(new Float32Array([1.5,3.14]).buffer);

在服务器端:

var data = new FloatArray32(msg); // data is 

{ 
 '0': 0,
 '1': 0,
 '2': 192,
 '3': 63,
 '4': 195,
 '5': 245,
 '6': 72,
 '7': 64
}

如果我将要发送的数组类型更改为 Uint8Array,则接收到的数据是

{'0': 1, '1': 3 }

对于给定的类型,哪个是正常的(我认为?)。

那么,我是不是做错了什么,或者这是 ws 模块的错误?

数据对我来说是正确的。它是两个小端格式的 32 位浮点数。

验证:

var buf = new Buffer([0,0,192,63,195,245,72,64]);
console.log(buf.readFloatLE(0));
// outputs: 1.5
console.log(buf.readFloatLE(4));
// outputs: 3.140000104904175

我不确定是否有办法从 Buffer 直接返回到 Float32Array,但如果需要,您可以这样做:

var fa = new Float32Array(buf.length / 4);
for (var i = 0, p = 0; i < buf.length; i += 4, ++p)
  fa[p] = buf.readFloatLE(i);