在处理成千上万的长时间超时时,JavaScript的setTimeout函数效率如何

时间:2013-06-28 10:00:52

标签: javascript performance node.js settimeout

我有一个Node.js服务器,可能会接受数以万计的socket.io个连接。

对于每个套接字,我需要有一些间隔(使用setInterval())来通知内存数据库套接字仍处于活动状态。这纯粹是为了垃圾收集目的 - 当一个套接字被认为是非活动状态时,它的会话数据将被gc'd。

有两种天真的方法:

  1. 为所有套接字设置一个超时,当被触发时,将通过所有套接字运行并通知数据库它们是活动的
  2. 为每个套接字设置超时
  3. 第一种方法对我的应用程序层更有效,但在数据库上会更加严厉,因为所有请求都会立即出现(尽管不经常)。
    第二种方式很好,因为数据库命中将更均匀地分散,但我不确定这将对应用程序本身的性能有多么严厉。

    因此,考虑到这一点,如果它们非常长(每个大约每10分钟一次),那么有数万个同时间隔是否有效?

1 个答案:

答案 0 :(得分:2)

第一种方法可能不会对数据库造成太大影响,因为您可以一次更新大量记录,而不是为每个套接字调用一次数据库。

通过批量分割套接字(比如1000),您可以使用一些数据库调用而不是数万个数据库调用来更新数据库记录。

那时对数据库来说会有点工作,但考虑到你每秒会进行10-20次数据库调用来更新套接字信息,你可能会减轻整个数据库的负担。