我正在构建一个类似于 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/