gpt4 book ai didi

javascript - 使用计时器清理 Socket.io session 数据

转载 作者:行者123 更新时间:2023-12-03 08:57:06 24 4
gpt4 key购买 nike

我正在考虑扩展运行 Socket.io 的 Node.js 服务器的功能,我目前正在使用它来允许客户端(iOS 应用程序)与服务器通信,以便它可以在连接之间拥有持久的 session 数据。

在初始连接时,服务器会向客户端传递一个 session ID,客户端将存储该 session ID,并在断开连接后重新连接时将其传递给服务器,这将允许客户端恢复其 session ,而无需重新向服务器提供有关其当前状态的某些信息(显然,当涉及到实际实现时,它会比这更安全)。

我想让 session 最终过期,因此它具有最大生命周期,或者如果在一定时间后没有继续,它就会超时。为此,我正在考虑为每个 session 使用计时器。我实际上不确定 Node.js 或 javascript 计时器 (setTimeout) 在后台如何工作,并且担心拥有 1000 个 session 计时器可能会导致大量内存/CPU 使用。这可能是一个潜在的问题吗?我是否应该有一个垃圾收集器,每分钟左右循环一次并删除过期的 session 数据?就我可以采取的对性能影响最小的方法来实现这一点来说,最优化的方法是什么,或者计时器已经完全是这样了吗?

最佳答案

它们经常用于超时,并且在 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

我无法想象这对您的用例来说是一个问题。

关于javascript - 使用计时器清理 Socket.io session 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32447071/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com