如何将 JavaScript 对象Socket.io
从服务器发送到客户端?我使用 Socket.io 作为 WebSocket(发送.send()
和监听message
事件)。当我试图在服务器端做类似的事情时:
var myObject = {
message: 'Hello World!'
}
socket.send(myObject);
在客户端我只得到这个字符串:[object Object]
如何将 JavaScript 对象Socket.io
从服务器发送到客户端?我使用 Socket.io 作为 WebSocket(发送.send()
和监听message
事件)。当我试图在服务器端做类似的事情时:
var myObject = {
message: 'Hello World!'
}
socket.send(myObject);
在客户端我只得到这个字符串:[object Object]
您实际上需要发出一个事件:
socket.emit('yourEvent', myObject);
如果您使用.send()
,您只是发送对象的字符串表示,这就是问题发生的地方。请注意,您可以使用.send()
,但您必须先对对象进行 JSON 编码,然后在接收时对其进行解码。
除非您有特定的原因,否则最好使用标准的 Socket.IO.emit()
方法,因为它会为您完成所有这些工作。这就是它的用途。
我刚刚使用一些较旧的示例遇到了这个问题。这是我找到的答案:Migrating 0.6 to 0.7+,我在下面重现。
在 v0.6 中,socket.send
会自动将对象转换{a: 'b'}
为 JSON。您可以通过以下方式向客户端发送数据:
socket.send({a: 'b'});
虽然这很酷,但它提出了一个基本问题。JSON 不仅编码对象,还编码字符串、数字等!因此,如果您明确声明要传递 JSON,API 会更加清晰(因为编码/解码 JSON 会降低性能)。
在 v0.7 中,使用json
标志:
socket.json.send({a: 'b'});
现在您还可以在浏览器和服务器之间发出和接收自定义事件:
socket.emit('my_event', {a: 'b'});
事件的参数会自动为您编码为 JSON。
socket.send()
不理解对象,但它喜欢 JSON。你可以这样使用:
socket.send(JSON.stringify(myObject));
并用于JSON.parse(json)
将 JSON 解析为 Object。
尝试在您的服务器端使用它
socket.json.send({ your : 'data' });
以及JSON.parse()
您客户端的方法。
在 socket.io V4.x 中,不需要使用JSON.stringify()
:
无需在对象上运行 JSON.stringify(),因为它会为您完成。
例如
// BAD
socket.emit("hello", JSON.stringify({ name: "John" }));
// GOOD
socket.emit("hello", { name: "John" });
有关此链接的更多信息。