如何在javascript中将ArrayBuffer序列化为websocket传输的BSON对象
我想用ArrayBuffer元素将javascript对象编码为如何在javascript中将ArrayBuffer序列化为websocket传输的BSON对象,javascript,node.js,mongodb,bson,arraybuffer,Javascript,Node.js,Mongodb,Bson,Arraybuffer,我想用ArrayBuffer元素将javascript对象编码为BSON并通过websocket传输。但是,序列化的BSON对象比它应该的大10倍 代码如下所示: var A = {buffer: new ArrayBuffer(1024)}; bson_buffer_size = BSON.calculateObjectSize(A) // returns 9164, I am expecting ~1024 我对BSON序列化程序的理解肯定是错误的。有人知道如何创建带有二进制缓冲区字段的
BSON
并通过websocket
传输。但是,序列化的BSON对象比它应该的大10倍
代码如下所示:
var A = {buffer: new ArrayBuffer(1024)};
bson_buffer_size = BSON.calculateObjectSize(A) // returns 9164, I am expecting ~1024
我对BSON序列化程序的理解肯定是错误的。有人知道如何创建带有二进制缓冲区字段的紧凑BSON对象吗?查看
js BSON
实现,它看起来像是在内部使用ArrayBuffer
来生成序列化数据,但如果不支持将ArrayBuffers序列化为二进制数据,则将其视为一个对象
例如,如果通过序列化循环运行它,则会得到以下输出:
BSON.deserialize(BSON.serialize({buffer: new ArrayBuffer(1024)}));
// Outputs:
{
buffer: {
'0': 0,
'1': 0,
// And so on
'1023': 0,
byteLength: 1024
}
}
为什么不直接通过websocket传输
ArrayBuffer
,而不是对其进行编码?WebSocket可以直接传输二进制数据,而无需任何额外的编码。您可能需要做一些工作,因为您必须将其他属性作为单独的对象发送,但这可能不是世界末日。我昨晚又做了一些实验,BSON似乎可以将Node.js缓冲区对象正确地序列化为二进制。直接转移ArrayBuffer绝对是我的选择。但正如您所说,我要么单独传输其他属性,要么编写一个专有解析器。我会做一些基准测试,看看哪种方法更有效。如果你能做NodeBuffer
s,那么一定要这样做。我假设您有理由不使用缓冲
,因为您使用的是阵列缓冲
,对不起:P