【发布时间】:2014-01-19 01:49:56
【问题描述】:
我创建了一个相当简单的 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))
这不起作用。
因此,作为一种工作方法,我遍历客户端以发送消息,效果很好:
io.sockets.clients().forEach(function (socket) {
socket.send(JSON.stringify(msg));
});
我在带有节点 v0.10.24、npm 1.3.21、socket.io 0.9.16、express 3.4.7 的 Ubuntu 12.04 和带有节点 0.10.12 的 MacOSX 上进行了测试。还有 Safari、Firefox、MacOSX 上的 Chrome 和 Windows7 上的 Chrome。 结果是一致的。
我是否忽略了一些明显的东西?
谢谢, 德克
编辑:是的,我忽略了我必须为频道命名(由于某种原因,.send 不需要该名称),例如:
io.sockets.emit('message', JSON.stringify(msg))
socket.emit 没有损坏。
【问题讨论】:
-
好的存储库和自述文件:)
-
doesn't work是什么意思?就像没有发送消息,还是发送空消息?此外,您可能会发现这个问题相关:stackoverflow.com/questions/11498508/socket-emit-vs-socket-send -
你试过 io.sockets.emit('message', JSON.stringify(msg))
-
@damphat 是对的:
emit的第一个参数应该是消息名称。您使用 JSON 字符串作为名称,这本身并没有错(它会被发出),但我怀疑您是否在客户端监听该确切字符串。 -
是的,是的。在我将其更改为 'io.sockets.emit('message', JSON.stringify(msg))' 后,它起作用了。 @damphat 如果您想为此收集积分,请添加答案,我很乐意接受。感谢(也感谢您的第一条评论 :-) 和其他人)!