gpt4 book ai didi

javascript - 通过 websockets 将 BSON 从 python 发送到 javascript

转载 作者:行者123 更新时间:2023-11-29 21:50:09 24 4
gpt4 key购买 nike

我有一个 python 应用程序,其中包含一个要发送到 HTML5/javascript GUI 的 Autobahn websocket 服务器。我一直在使用 JSON 在它们之间传输数据,但现在我真的开始强调我的带宽,因为我需要在我的一些消息中发送 1000 个(单精度)3D 位置的数组。将这些 float 中的每一个都写成 JSON 文本似乎是一种明显的浪费,因为理论上我可以为每个数字发送 4 个字节。 BSON 似乎是一个更好的主意,但我似乎无法让它发挥作用。

这是我的代码的要点:

# Python side
class BroadcastServerFactory(WebSocketServerFactory):
# ...
def broadcast_message(message):
bson_msg = bson.BSON.encode(msg)
prepared_msg = self.prepareMessage(bson_msg, isBinary=True)
for c in self.clients:
self.clients[c].sendPreparedMessage(prepared_msg)
// Javascript side
app.sock = new WebSocket('ws://127.0.0.1:9090');
app.sock.binaryType = "arraybuffer";
// ...
sock.onmessage = function(e) {
var msg = null;
try {
msg = BSON.deserialize(e.data);
}
catch(err) {
console.log('Failed to deserialize: ', err);
}
if(msg) app.onmessage(msg);
};

不幸的是,一旦我在 javascript 端收到一条消息,我的异常处理程序就会触发:

Failed to deserialize:  Error: corrupt bson message {stack: (...), message: "corrupt bson message"}

我正在使用 mongodb bson library 的浏览器版本在 javascript 方面,pymongo bson implementation在 Python 方面。

最佳答案

经过多次摆弄,我似乎有了一个可行的解决方案:

// Javascript side
app.sock = new WebSocket('ws://127.0.0.1:9090');
app.sock.binaryType = "blob"; // Changed from "arraybuffer"
// ...
sock.onmessage = function(e) {
try {
var reader = new FileReader();
reader.onload = function() {
uint8Array = new Uint8Array(this.result);
app.onmessage(BSON.deserialize(uint8Array));
}
reader.readAsArrayBuffer(e.data);

}
catch(err) {
console.log('Failed to deserialize: ', err);
}
};

关于javascript - 通过 websockets 将 BSON 从 python 发送到 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29707535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com