Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript的效率有多高;s setTimeout函数,用于处理成千上万的长超时_Javascript_Performance_Node.js_Settimeout - Fatal编程技术网

JavaScript的效率有多高;s setTimeout函数,用于处理成千上万的长超时

JavaScript的效率有多高;s setTimeout函数,用于处理成千上万的长超时,javascript,performance,node.js,settimeout,Javascript,Performance,Node.js,Settimeout,我有一个Node.js服务器,它可能接受数以万计的socket.io连接 对于每个套接字,我需要有某种间隔(使用setInterval())来通知内存中的数据库套接字仍然处于活动状态。这纯粹是为了垃圾收集的目的——当套接字被认为是非活动的时,它的会话数据将是gc的 有两种天真的方法: 为所有套接字设置一个超时,当触发时,将通过所有套接字运行,并通知db它们处于活动状态 为每个套接字设置超时 第一种方法对我的应用层更有效,但对数据库更苛刻,因为所有请求都会一次出现(虽然不经常出现)。 第二种方法很

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

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

有两种天真的方法:

  • 为所有套接字设置一个超时,当触发时,将通过所有套接字运行,并通知db它们处于活动状态
  • 为每个套接字设置超时
  • 第一种方法对我的应用层更有效,但对数据库更苛刻,因为所有请求都会一次出现(虽然不经常出现)。
    第二种方法很好,因为数据库命中将更均匀地分布,但我不确定这对应用程序本身的性能有多严重


    因此,考虑到这一点,如果时间间隔很长(大约每10分钟一次),那么拥有成千上万个同步时间间隔是否有效?

    第一种方法可能对数据库不太苛刻,因为您可以一次更新大量记录,而不是对每个套接字进行一次数据库调用

    通过将套接字分批(比如1000个)来更新数据库记录,只需几次数据库调用,而不是数万次数据库调用


    此时数据库需要做一些工作,但考虑到您可能会每秒进行10-20次数据库调用以更新套接字信息,您可能会减轻数据库的总体负载。

    内存中的数据库是类似sql的数据库还是自己的结构?我会优化标记为活动过程(生成更新包),而不是对每个套接字使用超时-这可能会给人一种更好的解决方案的假象,因为是否调用超时以及何时调用超时取决于服务器和创建套接字的时间(这可能会使整个过程更加糟糕)