Socket io - 房间或发射到各个插座的性能

问题描述 投票:0回答:1

我目前正在构建一个聊天应用程序,用户可以加入群聊并与同一组中的多个其他用户交谈。我使用套接字 io 房间来组织用户之间的群聊。

目前,在房间内发送消息时,我使用:

io.to("group name").emit("Send message")

此代码将消息发送到整个房间。我遇到的问题是,用户只有在单击消息列表(在我的消息/聊天页面上)中的聊天时才能连接到房间。如果用户加载应用程序并位于主屏幕上,并且尚未单击群聊,他们将不会连接到房间,因此不会收到该聊天的新事件。

为了解决这个问题,解决方案是将事件发送到每个单独的用户套接字而不是整个房间。这看起来像这样:

// Loop over all users in the group/room and send to their indivudal socket id, instead of emitting to the entire room like the previous code does

users.forEach(user => {
   io.to(user.socketId).emit("send message")
})

我的问题是,与上面的代码相比,直接发射到房间会更有效。例如,如果聊天有 100 个用户,则与上面的代码相比,直接向房间发送数据具有性能优势,上面的代码必须循环房间中的所有用户并将数据发送到他们各自的套接字。通过直接发送到房间,无需循环用户并发送到各个套接字,因此它一定比上面直接显示的代码性能更高,对吧?谢谢。

javascript node.js socket.io
1个回答
0
投票

我的问题是,与上面的代码相比,直接发射到房间会更高效。

不。发送到房间(在 socket.io 实现中)只是迭代房间中的套接字并向每个套接字发送单独的消息。所以,它已经在这样做了。

如果“组名”房间中的用户少于您的

user
数据结构中的用户,那么两个代码片段之间就会出现差异。如果是这种情况,那么发送到房间会导致发送次数减少,因为房间中包含的用户较少。

© www.soinside.com 2019 - 2024. All rights reserved.