请帮忙选择一个聊天室计时器的解决方案(nodeJS + socket.io + redis)。
创建了多个房间,每个房间都有一个主机,即该房间的管理员,每个房间将有 500 名成员。在任何时间't'可以有'n'个房间。一个房间会在创建 1 小时后被销毁。
Node server => 从redis 处理room 的成员相关数据,并在一定时间间隔后在每个room 中广播。这个间隔(即何时广播)由一个数组决定,将其称为 timerArrayForRoom1
。该数组保存广播数据的时间(以秒为单位)。每个房间的阵列都不同。
现在,两种方法 -
在 nodeJS 中使用 setInterval() 以便它会在一段时间间隔后调用其广播方法。每个房间都有其独立的间隔对象。
将
timerArrayForRoom1
交给房间的主人,让主人在几秒后根据计时器数组触发一个事件。即在客户端使用 setinterval() 。 Node 服务器将对该事件采取行动。
第一种方法是 HOST 独立的,但它涉及在 NodeJS 中使用 setInterval()。
哪一个实现起来更好,以便服务器能够同时支持 1000 个房间(其中有 500 个成员)同时运行和广播?
哪个更靠谱? (正如我所读,setInterval() 不保证调用该函数的时间)
或者任何其他方法?
Host/admin 将使用不同的设备,并且每个房间都有一个设备,因此第二种方法将在一定程度上平衡服务器负载。
最佳答案
setInterval
从你的 Node 服务器是要走的路。你已经给出了一个很好的理由,它是独立于客户的。此外,虽然它可能无法保证其执行时间。它最接近准时执行。
除非您的服务器因 CPU 密集型执行而挂起,否则这应该相当准确。允许 HOST 或任何其他客户端发起事件也容易受到同样的缺点影响。
关于javascript - 聊天室的可靠计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19783569/