對於每個可以持續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. JQuery重新啓動setInterval
- 2. 重複功能執行啓動問題
- 3. 重新啓動恢復Android
- 4. 在Javascript/jQuery中重新啓動setInterval()(不帶clearInterval)
- 5. setInterval和setTimeout
- 6. 如何重新啓動node.js服務器
- 7. 如何重新啓動Node.js子進程
- 8. elasticsearch數據增加和重複在每次重新啓動
- 9. 如何重新運行setTimeOut()?
- 10. 在ie7中重複執行動畫
- 11. 在重新啓動
- 12. 如何重新啓動/重複使用重複性任務?
- 13. Mysql在重新啓動後恢復ONLY_FULL_GROUP_BY
- 14. 你怎麼重新啓動setInterval在鼠標移出
- 15. 如何在slidetoggle()上停止setInterval()然後重新啓動?
- 16. 如何選擇新日期時停止並重新啓動setInterval
- 17. 保存WindowState並在重新啓動/重新登錄後恢復
- 18. Sbt總是在重新啓動後執行完全重新編譯
- 19. 中斷並重新啓動jQuery的setTimeOut事件序列?
- 20. Xterm在命令行中停頓,XQuartz崩潰並重復重新啓動
- 21. setInterval&setTimeout?
- 22. 如何在電話重新啓動後重新啓動鬧鐘?
- 23. 重新啓動服務器的Node.js和Socket.IO通知警告
- 24. 爲什麼在mysql重新啓動後改變表執行
- 25. 中止並重新啓動批處理執行
- 26. RabbitMQ失敗莫測,需要重新啓動,重新啓動修復問題
- 27. 在運行JBoss時重新啓動JMS
- 28. Sinatra:在啓動或重新啓動我的應用程序時執行代碼
- 29. 使用的setInterval重新啓動瀏覽器遊戲
- 30. jQuery - 如何使用clearInterval將其關閉後重新啓動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