大家好,我正在尝试通过 websockets 发送一个 javascript 对象:
faye-websockets 文档说:
send(message) 接受 String 或 Buffer 并通过连接向其他对等方发送文本或二进制消息。
服务器端我用的是node和faye。
var WebSocket = require('faye-websocket');
var http = require('http');
var server = http.createServer();
server.addListener('upgrade', function(request, socket, head) {
var ws = new WebSocket(request, socket, head);
ws.send({topic:'handshake', data:'sdf487rgiuh7'});
});
server.listen(8000);
客户端:
<script>
var ws = new WebSocket('ws://localhost:8000');
ws.onmessage = function(e) {
console.log(e.data); //prints [Object object] string and not the object
};
</script>
我的错误是什么?谢谢
最佳答案
WebSockets 支持发送和接收:字符串、类型化数组 (ArrayBuffer) 和 Blob。 Javascript 对象在发送前必须序列化为上述类型之一。
要将对象作为字符串发送,您可以使用内置的 JSON 支持:
ws.send(JSON.stringify(object));
要将对象作为类型化数组发送,您可以使用 JavaScript BSON 库,例如 this one :
ws.send(BSON.serialize(object));
当您收到 WebSocket 消息时,您需要对其进行反序列化。
从 WebSocket 消息中反序列化 JSON 字符串:
ws.onmessage = function (e) {
var object = JSON.parse(e.data);
...
};
如果您在 WebSocket 上使用二进制消息,那么首先您应该设置 binaryType 属性,以便将所有二进制消息作为类型化数组接收:
ws.binaryType = "arraybuffer";
那么反序列化会是这样的:
ws.onmessage = function (e) {
var object = BSON.deserialize(e.data);
...
};
这是一篇关于 using BSON in Javascript 的博文;
关于node.js - 使用 faye 通过 websockets 发送 javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13028604/