Socket.io如何发送JavaScript对象

如何使用Socket.io从服务器发送JavaScript对象到客户端? 我使用Socket.io作为WebSocket(使用.send()发送并侦听message事件)。 当我试图在服务器端做一些事情时:

 var myObject = { message: 'Hello World!' } socket.send(myObject); 

在客户端我只得到这个string: [object Object]

你实际上需要发出一个事件,而不是:

  socket.emit('yourEvent', myObject); 

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

除非你有特定的原因,否则最好使用标准的.emit()方法,因为它为你做了所有这些。 这就是它的目的。

我刚刚遇到了这个问题,使用一些旧的例子。 这里是我发现的答案: 迁移0.6到0.7+ ,我在下面重现。


socket.sendsocket.send会自动将对象{a: 'b'}为JSON。 您将通过以下方式将数据发送给客户端:

 socket.send({a: 'b'}); 

虽然这很酷,但它却是一个根本性的问题。 JSON不仅可以对对象进行编码,还可以对string,数字等进行编码! 所以,如果你明确声明你想传递JSON(因为与编码/解码JSON相关的性能损失),API更清晰。

在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)将JSONparsing为Object。

尝试在你的服务器端使用这个

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

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