對於每個可以持續10到30秒的連接用戶,我爲setTimeout和setInterval設置了不少服務器端超時。如果Node.js實例在其中一個超時期間重新啓動,則顯然它們在重新啓動時會被清除,這可能會給這些用戶帶來一些問題。我會如何去堅持這些超時,還是有任何模塊已經幫助了這個?在Node.js中重複執行setTimeout和setInterval重新啓動
8
A
回答
1
我會將開始時間和持續時間存儲在Redis中,並在應用程序重新加載時重新啓動不完整的定時器。有些Redis的模塊:
https://github.com/joyent/node/wiki/modules#wiki-db-nosql-redis
+0
你會如何確定應用程序崩潰?或者你會每秒更新redis中的start_time/duration? – 2015-09-22 09:12:19
1
setTimeOut
需要延遲參數,所以設置超時時間,捕獲 'currentServerTime + delay
' 時說, 'serverTriggerTime
' 和DB堅持這一點。然後,在重新啓動服務器時,使用serverTriggerTime
創建相同的計時器。 然後,delay = serverTriggerTime - currentServerTime
,使用此延遲來設置新的計時器。
當設置定時器
const date = Date.now();
const serverTriggerTime = +date + +delay; //time in milliseconds
服務器重新啓動:
serverTriggerTime = //retrieve from DB.
newDelay = serverTriggerTime - Date.now();
此外,設置新的計時器只有newDelay> = 0,意思是觸發時間還沒有達到和newDelay時間後會發生。
相關問題
- 1. node.js - setInterval&setTimeout遞增重複命令
- 2. JQuery重新啓動setInterval
- 3. 重新啓動的setInterval在JavaScript
- 4. 重新啓動setinterval一個新位置
- 5. 緩慢重新啓動在node.js中
- 6. 的setTimeout和setInterval在一起 - 重複暫停
- 7. 重複功能執行啓動問題
- 8. 如何在setInterval中暫停並重新啓動動畫?
- 9. setTimeout()重複動作問題
- 10. setInterval不重複
- 11. 重新啓動恢復Android
- 12. 在Javascript/jQuery中重新啓動setInterval()(不帶clearInterval)
- 13. JavaScript setInterval和setTimeout
- 14. setInterval和setTimeout
- 15. elasticsearch數據增加和重複在每次重新啓動
- 16. 在ie7中重複執行動畫
- 17. 重新啓動node.js生產服務器
- 18. 重新啓動的Node.js與永遠
- 19. 如何重新啓動Node.js子進程
- 20. 如何重新啓動node.js服務器
- 21. 重新啓動後重新啓動
- 22. 如何重新運行setTimeOut()?
- 23. 在Node.js中更新文件而不重新啓動服務器
- 24. 在重新啓動
- 25. setInterval是否重複?
- 26. 錯誤在Android中執行重新啓動命令
- 27. 如何重新啓動/重複使用重複性任務?
- 28. Mysql在重新啓動後恢復ONLY_FULL_GROUP_BY
- 29. 如何在停止後使用setInterval()重新啓動時鐘
- 30. 你怎麼重新啓動setInterval在鼠標移出
你不能使用node cron嗎? – albertjan 2012-07-12 18:43:35
怎麼樣?這些不是我正在設置的cron作業,基於用戶與應用程序的交互,他們會暫停10-30秒。 – 2012-07-12 18:53:47
你可以使用beanstalkd。它甚至可以堅持。 – Alfred 2012-11-28 23:22:01