2012-07-12 14 views
8

मैं सेटटाइमआउट के साथ कुछ सर्वर-साइड टाइमआउट सेट करता हूं और प्रत्येक कनेक्टेड उपयोगकर्ता के लिए सेट इंटरवल सेट करता है जो 10-30 सेकंड तक टिक सकता है। यदि Node.js इंस्टेंस इन टाइमआउट्स में से किसी एक के बीच में पुनरारंभ होता है, तो वे स्पष्ट रूप से पुनरारंभ करने पर साफ़ हो जाते हैं, जिससे इन उपयोगकर्ताओं के लिए कुछ समस्याएं हो सकती हैं। मैं इन टाइमआउट्स को जारी रखने के बारे में कैसे जाउंगा, या क्या ऐसे कोई मॉड्यूल हैं जो पहले से ही इसकी मदद कर रहे हैं?निरंतर सेटटाइमआउट और सेट इंटरवल नोड.जेएस में

+0

क्या आप इसके लिए नोड क्रॉन का उपयोग नहीं कर सकते? – albertjan

+1

कैसा है? ये क्रॉन नौकरियां नहीं हैं जिन्हें मैं स्थापित कर रहा हूं, वे ऐप के साथ उपयोगकर्ता इंटरैक्शन के आधार पर 10-30 सेकंड टाइमआउट हैं। –

+0

आप इसके लिए beanstalkd का उपयोग कर सकते हैं। यह भी जारी रख सकता है। – Alfred

उत्तर

1

मैं रेडिस में प्रारंभ समय और अवधि संग्रहीत करता हूं और आपके एप्लिकेशन को फिर से लोड होने पर अपूर्ण टाइमर को पुनरारंभ करता है। कुछ Redis मॉड्यूल:

https://github.com/joyent/node/wiki/modules#wiki-db-nosql-redis

+0

आप यह निर्धारित कैसे करेंगे कि ऐप क्रैश होने जा रहा है? या आप हर सेकेंड में redis में start_time/अवधि अपडेट करेंगे? –

1

setTimeOut जब टाइमआउट कब्जा 'currentServerTime + delay' सेटिंग पैरामीटर के रूप में देरी लगता है, इसलिए कहते हैं कि 'serverTriggerTime' और डीबी में यह लागू हैं। फिर, सर्वर के पुनरारंभ पर, 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 समय के बाद क्या होगा ।

संबंधित मुद्दे