大家好,我正尝试通过websockets发送javascript对象:
faye-websockets文档说:
send(message) 接受字符串或缓冲区,并通过连接向另一对等方发送文本或二进制消息。
服务器端我正在使用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比如这一个:
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); ... };
这是有关在Javascript中使用BSON的博客文章;