通过与faye的websockets发送一个JavaScript对象
大家好我试图通过websockets发送一个JavaScript对象:
faye-websockets文档说:
发送(消息) 接受一个string或缓冲区,并通过连接发送文本或二进制消息到另一个对端。
服务器端我使用节点和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支持发送和接收:string,types数组(ArrayBuffer)和Blob。 在发送之前,Javascript对象必须被序列化到上述types之一。
要将对象作为string发送,您可以使用内置的JSON支持:
ws.send(JSON.stringify(object));
要发送一个对象作为一个types数组,你可以使用一个JavaScript BSON库,比如这个 :
ws.send(BSON.serialize(object));
当您收到WebSocket消息时,您将需要反序列化它。
从WebSocket消息反序列化JSONstring:
ws.onmessage = function (e) { var object = JSON.parse(e.data); ... };
如果通过WebSocket使用二进制消息,则首先应设置binaryType属性,以便将所有二进制消息作为types数组接收:
ws.binaryType = "arraybuffer";
然后反序列化将如下所示:
ws.onmessage = function (e) { var object = BSON.deserialize(e.data); ... };
这里是关于在Javascript中使用BSON的博客文章;
我基本上与Socket.IO工作,但它看起来像你需要在服务器中的数据串化,并parsing它在客户端中,像这样:
在服务器上:
ws.send(JSON.stringify({topic:'handshake', data:'sdf487rgiuh7'}));
在客户端:
console.log(JSON.parse(e.data));