Socket.io如何发送JavaScript对象

时间:2012-08-04 01:14:54

标签: javascript json node.js socket.io

如何将Socket.io的JavaScript对象从服务器发送到客户端?我使用Socket.io作为WebSocket(使用.send()发送并使用message事件监听)。 当我尝试在服务器端执行某些操作时:

var myObject = {
    message: 'Hello World!'
}

socket.send(myObject);
在客户端

我只得到这个字符串:[object Object]

5 个答案:

答案 0 :(得分:41)

您实际上需要发出一个事件:

 socket.emit('yourEvent', myObject);

如果使用.send(),则只需发送对象的字符串表示形式,即发生问题的位置。请注意,您可以使用.send(),但您必须先对对象进行JSON编码,然后在接收时对其进行解码。

除非您有特殊原因,否则最好使用标准的Socket.IO .emit()方法,因为它会为您完成所有这些操作。这就是它的用途。

答案 1 :(得分:10)

我刚刚使用一些旧例子遇到了这个问题。以下是我找到的答案: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编码。

答案 2 :(得分:5)

socket.send()并不了解对象,但它喜欢使用JSON。你可以这样使用:

socket.send(JSON.stringify(myObject));

并使用JSON.parse(json)将JSON解析为Object。

答案 3 :(得分:4)

尝试在服务器端使用此功能

socket.json.send({ your : 'data' });

以及客户端的JSON.parse()方法。

答案 4 :(得分:1)

在socket.io V4.x中,不需要使用JSON.stringify()

<块引用>

无需在对象上运行 JSON.stringify(),因为它会为您完成。

例如

// BAD
socket.emit("hello", JSON.stringify({ name: "John" }));

// GOOD
socket.emit("hello", { name: "John" });

有关此 link 的更多信息。