我创建了一个相当简单的socket.io项目来证明'sockets.emit'似乎有问题。
我在这里创建了一个git:https://github.com/dirkk0/minimalsocket
有问题的行是 https://github.com/dirkk0/minimalsocket/blob/master/server.js#l17-21
// this should work but doesn't
io.sockets.emit(JSON.stringify(msg))
哪个不起作用。
因此,作为一个workaroud,我遍历客户端发送消息,这很好用:
io.sockets.clients().forEach(function (socket) {
socket.send(JSON.stringify(msg));
});
我在Ubuntu 12.04上测试了节点v0.10.24,npm 1.3.21,socket.io 0.9.16,express 3.4.7和MacOSX节点0.10.12。还有MacOSX上的Safari,Firefox,Chrome和Windows7上的Chrome。 结果是一致的。
我忽略了一些明显的事情吗?
谢谢, 德克
编辑:是的,我忽略了我必须给频道一个名字(出于某种原因,不需要.send),如:
io.sockets.emit('message', JSON.stringify(msg))
socket.emit没有被破坏。
答案 0 :(得分:3)
您忘记了emit()
的活动名称,该活动名称应为io.sockets.emit('message', yourObject)
或将其更改为io.sockets.send(yourObject)
;
emit()
和send()
的语法:
// @param yourEventName is a string
// @param yourObject is an serializable object (that mean you can stringify it)
socket.emit(yourEventName, yourObject);
// @param yourObject is a serializable object
socket.send(yourObject) // equipvalent to socket.emit('message', yourObject) (???)