2012-07-12 22 views
8

Her bir bağlı kullanıcı için 10-30 saniye sürebilen setTimeout ve setInterval ile birkaç sunucu tarafı zaman aşımı ayarlıyorum. Node.js örneği bu zaman aşımlarından birinin ortasında yeniden başlatılırsa, yeniden başlatıldığında açık bir şekilde temizlenirler, bu da bu kullanıcılar için bazı sorunlara neden olabilir. Bu zaman aşımlarına devam etmek için nasıl giderim, yoksa bu konuda zaten yardımcı olan herhangi bir modül var mı?Node.js genelinde kalıcı setTimeout ve setInterval yeniden başlatılıyor

+0

Bunun için node cron kullanamazsınız? – albertjan

+1

Ne kadar? Bunlar kurduğum cron işleri değil, uygulama ile kullanıcı etkileşimlerine dayanan 10-30 saniyelik zaman aşımları. –

+0

Bunun için beanstalkd kullanabilirsiniz. Hatta ısrar edebilir. – Alfred

cevap

1

Başlatma sürelerini ve sürelerini Redis'te depolarım ve uygulamanız yeniden yüklendiğinde eksik zamanlayıcıları yeniden başlatırım. Bazı Redis modülleri: zaman aşımı, yakalama 'currentServerTime + delay' ayarlarken

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

+0

Bu uygulamanın kilitleneceğini nasıl belirlersiniz? Ya da her saniye tekrar başladığınızda start_time/süresi güncellenir mi? –

1

setTimeOut yüzden, parametre olarak gecikme alır 'serverTriggerTime' demek ve DB bu inat. Ardından, sunucunun yeniden başlatılmasıyla, serverTriggerTime'u kullanarak aynı zamanlayıcıyı oluşturun. Sonra, delay = serverTriggerTime - currentServerTime, yeni zamanlayıcıyı ayarlamak için bu gecikmeyi kullanın.

sunucu yeniden başlatmada, saat ve alarm

const date = Date.now(); 
const serverTriggerTime = +date + +delay; //time in milliseconds 

ayarı: tetik zaman anlam newDelay> = 0, ulaşmamış yalnızca Ayrıca

serverTriggerTime = //retrieve from DB. 
newDelay = serverTriggerTime - Date.now(); 

, belirlenen yeni zamanlayıcı ve newDelay süre sonra gerçekleşecek .

İlgili konular