如何跨多个服务器 nodejs 和 socket.io 存储 socket.id

Posted

技术标签:

【中文标题】如何跨多个服务器 nodejs 和 socket.io 存储 socket.id【英文标题】:How to store socket.id across multiple servers nodejs and socket.io 【发布时间】:2019-09-07 05:28:33 【问题描述】:

跨多个服务器存储用户的 socket.id 的最佳方式是什么?以一个简单的聊天应用程序为例,如果不同服务器上的两个用户正在相互发送消息,则两个服务器必须将每个用户的套接字 id 存储在某个地方,以便他们可以将消息从一个用户发送到另一个用户。

目前我正在使用 redis 哈希来存储每个用户的套接字 id(如果他们在线),但如果用户有两个连接(例如他们打开了聊天应用程序的两个选项卡),这将不起作用。继续使用 redis 的最佳方法是重新构建数据结构,使其在用户连接两次时可以正常工作,还是迁移到 mongodb 或 mysql 之类的东西会更好?

我还想要一种使数据过期的方法,例如,如果套接字 id 存储超过 24 小时,那么它应该被自动删除。我已经研究过用 redis 来做这件事,但似乎不可能只删除散列中的一对。过期数据可以在 mysql 或 mongodb 中完成吗?

【问题讨论】:

【参考方案1】:

你试过插座房间吗?

check this link for rooms and namespaces

例如,如果用户有多个连接,则将他们加入一个具有唯一名称(可能是 userId 或其他名称)的房间

【讨论】:

谢谢,与将 socketId 存储在 redis 哈希中相比,这是一种更清洁、更简单的方法。

以上是关于如何跨多个服务器 nodejs 和 socket.io 存储 socket.id的主要内容,如果未能解决你的问题,请参考以下文章

使用 (socket.io + RedisStore) 跨多个服务器进行通信

如何使用 socket.io、react native、nodejs 管理聊天应用程序的多个套接字连接

如何在前端获取 socket.on 函数?事件被触发和处理。我正在使用 socket.io、NodeJS 服务器和 Redis.io

NodeJS 和 Socket.IO 用户认证

如何在webpack中使用跨域

nodejs socketio 多个域(单独的io)