通过与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> 

我的错误是什么? 谢谢

       

网上收集的解决方案 "通过与faye的websockets发送一个JavaScript对象"

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));