用faye通过websockets发送javascript对象

okxuctiv  于 2022-11-11  发布在  Java
关注(0)|答案(4)|浏览(183)

大家好,我正试图通过websockets发送一个javascript对象:
faye-websockets文档说明:

**send(message)**接受String或Buffer,并通过连接将文本或二进制消息发送到另一个对等项。

服务器端我使用节点和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>

我的错误是什么?谢谢

vjhs03f7

vjhs03f71#

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的博客文章;

b0zn9rqh

b0zn9rqh2#

我基本上是在使用Socket.IO,但是看起来您需要在服务器中字符串化数据,然后在客户机中解析它,如下所示:
在服务器中:

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

在客户端中:

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

zc0qhyus3#

委托单位:

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

vxbzzdmp4#

ws.json = (obj) => ws.send(JSON.stringify(obj));

ws.json({ message: "hello" });

相关问题