node.js - socket.io 在连接时加入多个房间

标签 node.js socket.io android-room

我正在构建一个类似于 Facebook Messenger 的聊天应用程序。它应该有 2 个屏幕,一个显示用户参与的对话列表及其最后一条消息,另一个是特定对话的聊天屏幕。我搜索了一下,发现在服务器端我们可以允许客户端 join multiple rooms at once .

连接后将客户端加入多个房间是否很常见?例如,当建立连接时,我会查询数据库以查找用户的所有对话,并让他加入所有这些房间(每个房间映射到一个对话)。这样当用户停留在对话列表中时,他仍然可以接收来自任何对话的消息。

像这样:

io.on("connection", (socket) => { 
    const userRooms = await db.findUserRooms(socket.userId);
    socket.join(userRooms);
});

例如,当每个用户有数百个对话时,这会对性能产生影响吗?

最佳答案

根据Socket.io Docs ,加入多个房间的方式就是您在问题中描述的方式,即 socket.join(["room1", "room2", ...])

性能

对性能的影响取决于您运行的应用程序类型以及您的机器和网络的能力。

因为房间本质上只是一个 server-side map of socket ids ,房间本身的性能影响在服务器端并不明显。

正在加载房间

从数据库加载房间的性能影响在很大程度上取决于您的数据库及其功能和网络。

由于我不确定您使用的是什么数据库,因此我无法提供任何有关细节的信息,但大多数数据库应该能够在几秒钟内返回行。

关于node.js - socket.io 在连接时加入多个房间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69221200/

相关文章:

Android房间类型转换器不工作

javascript - Node .JS : How to make sure a reading stream has ended and the data written?

node.js - 本地主机上的 MongoDB SSL 是否是必需的?

sqlite - 房间的日历类型转换器(Kotlin)

javascript - 为什么在浏览器中未定义 socket.id

node.js - 我收到 "io is not defined"错误

android-sqlite - Room 数据库处理 POJO 和多个表中的继承

用于排除多个文件的 node.js glob 模式

python - 使用 Nodejs Consumer 减少命名管道 (fifo) 吞吐量

python - 从 Celery 任务使用 SocketIO 推送服务器