我很乐意从服务器向客户端发送消息,也可以从客户端向服务器发送消息。但是,我似乎需要从服务器本身发送(广播)消息到(服务器)套接字 - 我不知道如何去做。
案例是服务器(通过Redis订阅)了解可能非常多的客户端的子集需要被发送消息。每个服务器端套接字可以自行确定是否需要触发。我只是不知道如何让他们知道他们必须进行检查(可能与来自客户端(?)的消息的“正常”方式大致相同)。
FWIW可以通过仅使用handshakeData(以及其他非socket特定于实例的服务器端结构)来进行检查。如果有办法从外部获取handshakeData',那么它也是可能的;但绝不是真的很漂亮。
任何想法/指点任何人?
答案 0 :(得分:1)
当我遇到类似问题时,我发现会有一个标准的nodeJS特定解决方案。我找到了EventEmitter
:
http://nodejs.org/api/events.html#events_class_events_eventemitter
答案 1 :(得分:0)
我似乎终于得到了它(通过调试socket.io代码)。
在消息处理程序中获取有问题的套接字,并使用事件和其他属性(通常是带有附加信息的“数据”对象)设置“params”数组。通过这两个电话socket.$emit.apply(socket, params)
。
在实际代码中:
for (var socketId in io.namespaces['/mynamespace'].sockets) {
var socket = io.namespaces['/mynamespace'].sockets[socketId];
var params = ['test event', {'foo': 'bar'}];
socket.$emit.apply(socket, params);
}