我正在考虑扩展运行Socket.io的node.js服务器的功能,我正在使用它来允许客户端(iOS应用程序)与服务器通信,这样它就可以在连接之间拥有持久的会话数据。 / p>
在初始连接时,服务器向客户端传递客户端将存储的会话ID,如果在断开连接后重新连接,则会传递给服务器,这将允许客户端恢复其会话而无需重新提供服务器关于其当前状态的某些信息(显然,在实际实施时,它将比这更安全)。
我想这样做,以便会话最终到期,因此它具有最大生命周期,或者如果在一段时间后它没有继续超时。要做到这一点,我想考虑为每个会话使用计时器。我真的不确定node.js或javascript计时器(setTimeout)如何在后台工作,并担心有1000个会话计时器可能会导致大量的内存/ CPU使用。这可能是一个潜在的问题,我是否应该每分钟左右循环一次垃圾收集器并删除过期的会话数据?什么是对性能方法影响最小的最佳方式,我可以做到这一点,或者计时器已经完全是这样的?
答案 0 :(得分:1)
它们经常用于超时,并且在cpu中非常有效。
// ten_thousand_timeouts.js
for (var i=0;i<=10000;i++) {
(function(i){
setTimeout(function(){
console.log(i);
},1000)
})(i)
}
使用10,000个日志的结果只花了0.336秒,并且将其记录到控制台的操作花费了大部分时间。
//bash script
$> time node ten_thousand_timeouts.js
1
...
9999
10000
real 0m1.336s
user 0m0.275s
sys 0m0.146s
我无法想象这对您的用例来说是一个问题。