4

我可以愉快地从服务器向客户端发送消息,也可以从客户端向服务器发送消息。但是,我似乎需要从服务器本身向(服务器)套接字发送(广播)消息——我不知道该怎么做。

案例是服务器(通过 Redis 订阅)了解到可能非常多的客户端中的一个子集需要发送消息。每个服务器端套接字都可以自行确定是否需要触发。我只是不知道如何让他们知道他们必须进行检查(可能与来自客户端的消息(?)的“通常”方式大致相同)。

FWIW 可以仅使用 handshakeData (和其他非套接字实例特定的服务器端结构)进行检查。如果有办法“从外部”获取 handshakeData,这也是一种可能;但绝不是真的漂亮。

任何想法/指针任何人?

4

2 回答 2

1

当我遇到类似的问题时,我发现会有一个标准的 nodeJS-specific 解决方案。我找到了EventEmitter

http://nodejs.org/api/events.html#events_class_events_eventemitter

于 2012-11-26T21:42:28.380 回答
0

我似乎终于明白了(通过调试 socket.io 代码)。

在消息处理程序中获取有问题的套接字并设置一个带有事件和其他属性的“参数”数组(通常是带有附加信息的“数据”对象)。用这两个电话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);
}
于 2012-07-15T19:50:07.650 回答