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.send
, socket.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()
方法。