簡體   English   中英

使用計時器清理Socket.io會話數據

[英]Cleaning up Socket.io session data with timers

我正在考慮擴展運行Socket.io的node.js服務器的功能,目前正在使用該功能來允許客戶端(iOS應用)與服務器進行通信,以便它在連接之間可以具有持久的會話數據。

初始連接時,如果服務器斷開連接后重新連接,則服務器會向客戶端傳遞一個會話ID,客戶端將存儲該會話ID,稍后再傳遞給服務器,這將允許客戶端恢復其會話,而不必向服務器重新提供有關以下內容的某些信息:它的當前狀態(顯然,在實際實施中,它會比現在更安全)。

我要這樣做,以便會話最終到期,因此它具有最大生存期,或者如果在一定時間后仍未繼續運行,則該生存期已到。 為此,我正在考慮為每個會話使用計時器。 我實際上不確定在后台如何運行node.js或javascript計時器(setTimeout),並擔心擁有1000個會話計時器可能會導致大量內存/ CPU使用率。 這可能是一個潛在的問題,我是否應該有一個垃圾收集器每分鍾左右循環一次並刪除過期的會話數據? 從對性能的影響最小的角度來看,哪種最佳方法是我可以做到的,或者計時器已經做到了?

它們經常用於超時,並且在CPU中非常有效。

// ten_thousand_timeouts.js
for (var i=0;i<=10000;i++) {
  (function(i){
    setTimeout(function(){
      console.log(i);
    },1000)
  })(i)
}

對於10,000,日志結果僅花費.336秒,而將其記錄到控制台的過程則花費了大部分時間。

//bash script
$> time node ten_thousand_timeouts.js
1
...
9999
10000

real    0m1.336s
user    0m0.275s
sys     0m0.146s

我無法想象這是您的用例的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM