我们在大型聊天应用程序中使用socketIO.
在某些时候,我们希望向所有其他用户发送"在线状态"(用户可用性).
io.in('room1').emit('availability:update', {userid='xxx', isAvailable: false});
room1可能包含很多用户(最多500个).当触发许多可用性更新时,我们观察到NodeJS负载显着增加.
我的想法是使用与Socket IO类似的redis商店.让Web浏览器客户端连接到不同的NodeJS服务器.
当我们想要发射到房间时,我们使用Redis PubSub ZeroMQ甚至RabbitMQ将"emit to room1"有效负载分配给所有其他NodeJS进程以实现持久性.每个进程本身都会调用自己的io.in('room1').emit
目标来定位其连接用户的子集.
这种设置的一个问题是进程间通信可能变得非常繁忙,我想知道它是否会成为未来的问题.
这是我想到的架构.