在 socket.io 中发出不工作
Posted
技术标签:
【中文标题】在 socket.io 中发出不工作【英文标题】:emit in socket.io not working 【发布时间】: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
是什么意思?就像没有发送消息,还是发送空消息?此外,您可能会发现这个问题相关:***.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 如果您想为此收集积分,请添加答案,我很乐意接受。感谢(也感谢您的第一条评论 :-) 和其他人)!
【参考方案1】:
您忘记了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) (???)
【讨论】:
如果服务器没有发出,是否可以获得回调的值?以上是关于在 socket.io 中发出不工作的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Express 4 路由中使用 socket.io 向连接的套接字发出事件?