gpt4 book ai didi

node.js - 在 Redis 中存储和检索套接字

转载 作者:IT王子 更新时间:2023-10-29 06:00:55 24 4
gpt4 key购买 nike

我是 Node 和 Redis 的新手,所以如果我在这里遗漏了一些重要的东西,请原谅我。我正在尝试使用 node_redis 客户端在 Redis 中存储一个 Node.js net.Socket 对象,这样我就可以重用之前在此套接字上建立的连接。我将套接字存储为值作为“用户”集的一部分:

client.sadd("users", username); //username is a string
client.hmset(username, "ip", socket.remoteAddress, "connection", net.Socket(socket));

在不同的时候,我正在检索这个套接字:

    client.smembers("users", function(err, replies) {

replies.forEach(function(reply,i){
if(recipient == reply) { //recipient is the username i've got

client.hget(reply, "connection", function(err, obj) {
console.log("socket's remoteaddress = " + net.Socket(obj).remoteAddress);
net.Socket(obj).write("asdasdasd");
});

}
});
});

但是,: net.Socket(obj).remoteAddress);被记录为“未定义”。还, net.Socket(obj).write("asdasdasd");给我和错误说:

错误:此套接字已关闭。

所以我想我的问题是 - 您可以在 Redis 中以这种方式存储套接字并期望它们在检索时工作吗?有没有正确/更好的方法来做到这一点?

附言我尝试在不强制转换为 net.Socket 的情况下检索 Socket,但它仍然没有任何用处。

最佳答案

套接字和套接字 API(例如 Berkeley Sockets)本质上处理特殊的系统特定资源,对于这些资源,在远程系统上存储或引用甚至序列化都没有任何意义。

尽管在现实中,套接字通常由 file descriptors 唯一标识因此您可以轻松地将那个小的、唯一的整数存储在数据库中以供以后访问;但是,该整数仅在该进程实例中该套接字的事件生命周期内才有意义。像这样的策略将充满挑战,主要与套接字文件描述符编号的 transient 特性有关。

关于node.js - 在 Redis 中存储和检索套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9459814/

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