frx*_*x08 34 serialization websocket node.js javascript-objects faye
大家好我正试图通过websockets发送一个javascript对象:
faye-websockets文档说:
send(message) 接受String或Buffer,并通过连接向另一个peer发送文本或二进制消息.
服务器端我正在使用节点和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);
Run Code Online (Sandbox Code Playgroud)
客户端:
<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>
Run Code Online (Sandbox Code Playgroud)
我的错误是什么?谢谢
kan*_*aka 78
WebSockets支持发送和接收:字符串,类型化数组(ArrayBuffer)和Blob.在发送之前,必须将Javascript对象序列化为上述类型之一.
要将对象作为字符串发送,您可以使用内置的JSON支持:
ws.send(JSON.stringify(object));
Run Code Online (Sandbox Code Playgroud)
要发送一个对象作为一个类型数组,你可以使用JavaScript库BSON比如这一个:
ws.send(BSON.serialize(object));
Run Code Online (Sandbox Code Playgroud)
收到WebSocket消息时,需要对其进行反序列化.
要从WebSocket消息反序列化JSON字符串:
ws.onmessage = function (e) {
var object = JSON.parse(e.data);
...
};
Run Code Online (Sandbox Code Playgroud)
如果您通过WebSocket使用二进制消息,那么首先应设置binaryType属性,以便将所有二进制消息作为类型化数组接收:
ws.binaryType = "arraybuffer";
Run Code Online (Sandbox Code Playgroud)
然后反序列化将如下所示:
ws.onmessage = function (e) {
var object = BSON.deserialize(e.data);
...
};
Run Code Online (Sandbox Code Playgroud)
这是一篇关于在Javascript中使用BSON的博客文章;
| 归档时间: |
|
| 查看次数: |
50608 次 |
| 最近记录: |