zsd*_*zsd 29 javascript json node.js socket.io
如何Socket.io从服务器向客户端发送JavaScript对象?我正在使用Socket.io作为WebSocket(发送.send()和监听message事件).当我尝试在服务器端执行某些操作时:
var myObject = {
message: 'Hello World!'
}
socket.send(myObject);
Run Code Online (Sandbox Code Playgroud)
在客户端我只得到这个字符串: [object Object]
Bra*_*rad 45
实际上你需要发出一个事件:
socket.emit('yourEvent', myObject);
Run Code Online (Sandbox Code Playgroud)
如果使用.send(),则只需发送对象的字符串表示形式,即发生问题的位置.请注意,您可以使用.send(),但您必须首先对对象进行JSON编码,然后在接收时对其进行解码.
除非您有特殊原因,否则最好使用标准的Socket.IO .emit()方法,因为它会为您完成所有这些操作.这就是它的用途.
Amr*_*mro 11
我刚刚使用一些旧的例子遇到了这个问题.以下是我找到的答案:将0.6迁移到0.7+,我将在下面重现.
在v0.6中,socket.send会自动将对象转换{a: 'b'}为JSON.您可以将数据发送给客户:
socket.send({a: 'b'});
Run Code Online (Sandbox Code Playgroud)
虽然这很酷,但却是一个根本问题.JSON不仅编码对象,还编码字符串,数字等!因此,如果您明确声明要传递JSON,则API会更清晰(因为与编码/解码JSON相关的性能损失).
在v0.7中,使用json标志:
socket.json.send({a: 'b'});
Run Code Online (Sandbox Code Playgroud)
现在您还可以在浏览器和服务器之间发出和接收自定义事件:
socket.emit('my_event', {a: 'b'});
Run Code Online (Sandbox Code Playgroud)
事件的参数会自动以JSON编码.
小智 5
socket.send()不了解对象,但是它喜欢JSON。您可以使用这种方式:
socket.send(JSON.stringify(myObject));
Run Code Online (Sandbox Code Playgroud)
并用于JSON.parse(json)将JSON解析为Object。
| 归档时间: |
|
| 查看次数: |
62054 次 |
| 最近记录: |