2

我需要能够让客户端使用 NodeJS 套接字进行连接,但随后能够将数据发送到特定客户端。

这是我现在正在做的一个例子:

var net = require('net');
var sockets = [];

var server = net.createServer(function(c) {
    c.sock_id = sockets.push(c);
    c.on('close', function() {
        delete sockets[c.sock_id];
    });
});
server.listen(1234, function() {});


function send_to_socket(id,message) {
    sockets[id].write(message);
}

在我看来,这似乎不是处理这个问题的正确方法,尤其是在套接字存储在 Redis 之类的东西中的环境中。

有人可以阐明处理此问题的正确方法吗?

4

1 回答 1

0

套接字应该有唯一的标识符。如果它们在连接层上没有唯一标识,那么您必须手动创建自己的标识。它可以是processId + increment或任何其他网络可靠的标识。

然后是具有套接字并负责处理其消息队列以及发送消息的工作者。
Redis 可以轻松存储套接字的 ID,但也必须存储此套接字绑定的工作人员 ID。
然后,您需要在工作人员之间进行直接通信,以便能够相互发送消息。这可以通过 Redis 通过为工作人员或套接字设置消息队列来完成,负责此套接字的工作人员将提取消息并处理它们以进行发送。
或者,您可以使用 ZeroMQ 从工作人员到工作人员进行直接通信,并直接向他们发送消息。我会推荐 Redis 消息解决方案。即使是单点输入,但这种方案会更加灵活可靠。

最好将套接字列表保留为键值对象,其中键将是套接字的 id,而值 - 套接字或具有更多信息的对象和套接字它自己。
要将数据附加到套接字,您应该能够简单地向套接字对象添加值。

于 2013-07-04T09:30:01.037 回答