聊天室的可靠计时器

Reliable timer for a chat room

本文关键字:计时器 聊天室      更新时间:2023-09-26

请帮忙为聊天室计时器选择一个解决方案(nodeJS + socket.io + redis)。

创建多个房间,每个房间

只有一个主机,即该房间的管理员,每个房间都有 500 名成员。在任何时候都可以有"n"个房间。房间将在创建 1 小时后被摧毁。

节点服务器 => 处理来自 redis 的成员相关数据,并在一段时间后在每个房间中广播。 这个间隔(即何时广播)由数组决定,称为timerArrayForRoom1。此数组保存广播数据的时间(以秒为单位)。每个房间的此数组都不同。

现在,有两种方法——

  1. 在nodeJS中使用setInterval(),以便它在一段时间后调用其广播方法。每个房间都有其单独的间隔对象。

  2. 向房间的主机提供timerArrayForRoom1,并让主机根据计时器数组在几秒钟后触发事件。 即在客户端使用 setinterval()。节点服务器将对该事件执行操作。

第一种方法与 HOST 无关,但它涉及在 NodeJS 中使用 setInterval()。

哪一个会更好地实现,以便服务器能够支持 1000 个房间,其中有 500 个成员同时运行和广播?

哪个更可靠?(正如我读到的setInterval()不保证调用函数的时间)

还是其他方法?

主机/管理员将是不同的设备,每个房间只有一个,因此第二种方法将在一定程度上平衡服务器负载。

节点

服务器setInterval是要走的路。您已经给出了一个很好的理由,即它独立于客户端。此外,虽然它可能无法保证其执行时间。它最接近准时执行。

这应该相当准确,除非您的服务器由于 CPU 密集型执行而挂起。此外,允许 HOST 或任何其他客户端启动事件也容易受到相同的缺点的影响。