Javascript nodejs多定时器和cpu使用率

Javascript nodejs多定时器和cpu使用率,javascript,node.js,express,socket.io,Javascript,Node.js,Express,Socket.io,假设我有1000个并发socket.io连接。 在断开连接时,我想给用户至少30秒的时间来重新连接并维护其会话,因此我考虑添加一个计时器来实现这一点。 考虑到计时器将运行30秒并且只执行简单的数据库查询,这会是cpu密集型的吗?这是后端btw,所以没有浏览器 谢谢 考虑到计时器将运行30秒并且只执行简单的数据库查询,这会是cpu密集型的吗 您不希望计时器每30秒运行一次,并且在没有断开连接的套接字时运行数据库查询。这有点像“投票”,它很少是最有效的做事方式 更有意义的是,每次断开插座时设置30秒

假设我有1000个并发socket.io连接。 在断开连接时,我想给用户至少30秒的时间来重新连接并维护其会话,因此我考虑添加一个计时器来实现这一点。 考虑到计时器将运行30秒并且只执行简单的数据库查询,这会是cpu密集型的吗?这是后端btw,所以没有浏览器

谢谢

考虑到计时器将运行30秒并且只执行简单的数据库查询,这会是cpu密集型的吗

您不希望计时器每30秒运行一次,并且在没有断开连接的套接字时运行数据库查询。这有点像“投票”,它很少是最有效的做事方式

更有意义的是,每次断开插座时设置30秒计时器。将timerID放入会话对象中。如果用户重新连接,在重新连接后,您将找到会话并在其中找到一个timerID。取消计时器。如果用户在30秒内未重新连接,则计时器将启动,您可以清除会话

计时器本身不消耗CPU,所以拥有一堆计时器也没什么大不了的。node.js计时器系统非常高效。它跟踪下一个计时器何时启动,这是唯一一个在技术上处于活动状态并为系统计时器设置的计时器。当该计时器启动时,它会为下一个应该启动的计时器设置一个系统计时器。计时器保存在一个排序的数据结构中,以便于node.js使用

因此,这里要消耗的唯一CPU是一个非常小的家务劳动,用来组织一个新的计时器,然后是计时器启动时要运行的任何代码。如果你无论如何都要运行那段代码,而这只是你现在运行还是30秒后运行的问题,那么当你运行它的时候,它对你的CPU使用没有任何影响。无论哪种方式,它都将消耗相同数量的总CPU

因此,如果您想在每个套接字断开连接时设置一个30秒的计时器,那么这是一件非常好的事情,并且对您的CPU使用率不会产生明显的影响


这里有一篇参考文章可以帮助解释:还有另一个答案:

完全取决于你如何实现计时器。不,我不这么认为,我建议您使用cron作业调度程序(如节点调度程序)在30秒以上处于非活动状态时关闭连接。@MarciaOng那么您指的是使用一个计时器检查每个用户是否已断开连接?@gitterio Yes。而不是为每个连接创建计时器。有一个每分钟执行closeInactiveConnection函数的计划程序(您可以自定义它)。通过这样做,它将在cpu服务器上使用更少的RAM空间和可预测的执行负载。假设计划程序每分钟运行一次,服务器每小时只执行60次CloseInactivateConnection。@gitterio算法的复杂度为O(n),n=分钟,无论连接数多少,其增长系数为0。这比拥有n=socket.io连接的数量要好