在连接上下文之外引用NodeJSnetworking套接字

我需要能够让客户端使用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这样的环境中。

有人可以通过正确的方式来解决这个问题吗?

套接字应该有唯一的标识符。 如果在连接层上没有唯一标识,则必须手动创build自己的身份标识。 它可以是processId + increment或任何其他networking可靠的标识。

然后有工作人员有套接字,负责处理其消息队列以及发送消息。
Redis可以轻松存储套接字的ID,但必须存储此套接字绑定的工作者ID。
那么你需要在工作人员之间有直接的沟通,以便能够相互发送信息。 这可以通过Redis通过为工作人员或套接字build立消息队列来完成,负责这个套接字的工作人员将拉取消息并处理它们以进行发送。
或者,您可以直接与工人进行沟通,例如使用ZeroMQ,并直接向他们发送消息。 我会build议Redis解决scheme的消息。 即使这是一个单一的input点,但这种解决scheme将更加灵活和可靠。

最好将套接字列表保存为键值对象,其中key将是套接字的id,value – 套接字或具有更多信息的套接字或对象,套接字自身。
要将数据附加到套接字,您应该能够简单地将值添加到套接字对象。