gpt4 book ai didi

node.js - 在连接上下文之外引用 NodeJS Net Sockets

转载 作者:太空宇宙 更新时间:2023-11-03 22:38:30 25 4
gpt4 key购买 nike

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

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

最佳答案

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

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

最好将套接字列表保留为键值对象,其中键是套接字的 ID,值 - 套接字或具有更多信息的对象以及套接字本身。
要将数据附加到套接字,您应该能够简单地将值添加到套接字对象。

关于node.js - 在连接上下文之外引用 NodeJS Net Sockets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17455772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com