sending a javascript object through websockets wit

2019-07-02 08:37发布

大家好,我试图通过的WebSockets发送JavaScript对象:

王菲,WebSockets的文件说:

发送(消息) 可以接受一个字符串或一缓冲器和发送过来的连接到其它对等文本或二进制消息。

服务器端我使用节点和王菲。

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>

什么是我的错误? 谢谢

Answer 1:

的WebSockets支持发送和接收:字符串,类型化数组(ArrayBuffer)和斑点。 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 ;



Answer 2:

客户:

const bson = new BSON();
ws.binaryType = 'arraybuffer';

ws.onmessage = function(event) {
  console.log(bson.deserialize(Buffer.from(event.data)));
}

服务器:

 const data = bson.serialize({ ... });
 ws.send(data);


Answer 3:

我基本上与Socket.IO工作,但它看起来像你需要字符串化在服务器上的数据,并在像这样的客户端解析它:

在服务器:

ws.send(JSON.stringify({topic:'handshake', data:'sdf487rgiuh7'}));

在客户端:

console.log(JSON.parse(e.data));


文章来源: sending a javascript object through websockets with faye