node.js - 一旦客户端断开连接并再次连接服务器位于 Socket.io 和 node.js 上,Socket Id 是否会重新发出?

标签 node.js express socket.io

我想实现一对一聊天,我对如何实现这一点感到困惑。 我试图通过向每个套接字发送消息来实现此目的,但如果客户端断开连接并且套接字 ID 发生更改,它将无法在存储在数据库中的套接字 ID 上发送消息。关于如何实现这一点有什么建议吗?

提前谢谢您。

最佳答案

对于每个新 session ,都会创建新的客户端套接字实例,因此 id 可能会更改,因此为了能够识别用户,您应该依赖一些 user_id 而不是套接字 id,例如在新 session 时 你可以实现一些登录逻辑,例如

io.on("connection", function(socket) {

   // Accept a login event with user's data
   socket.on("login", function(userid) {
       // store socket instance against userid in session store like redis.
    }); 
});

这样你就可以在每个连接上保存一个新的套接字实例。

注意:使用套接字,您只能在接收者在线的情况下发送消息,如果您想要离线消息功能,您可能需要检查其他消息代理,例如rabbitmq

Building NodeJs Chat Application with RabbitMQ

关于node.js - 一旦客户端断开连接并再次连接服务器位于 Socket.io 和 node.js 上,Socket Id 是否会重新发出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47108681/

相关文章:

unit-testing - 如何执行涉及 redis、socket.io 和 nodejs/express 的单元测试?

javascript - rijndael-128 cbc javascript 不像 php mcrypt 那样返回正确

python - SocketIO 从 Node 服务器发送到 Python 客户端

javascript - 使用 Node 缩略图从图像生成缩略图

javascript - 为什么我无法从 Node JS 的 http 服务器获得前几个响应?

javascript - 失去对方法内对象的引用

node.js - 如何正确格式化此 EJS 三元条件?

javascript - AWS 上的 Node js Web 应用程序无法查找无法在 View 目录 "pages/home"中查找 View "/var/app/views"

javascript - socket io 房间名称和特定房间内的用户数量

linux - 增加到 node.js/socket.io 的最大连接