2012-07-12 36 views
8

Establecí bastantes tiempos de espera en el servidor con setTimeout y setInterval para cada usuario conectado que puede durar entre 10 y 30 segundos. Si la instancia de Node.js se reinicia en el medio de uno de estos tiempos de espera, es obvio que todos se borran al reiniciar, lo que puede causar algunos problemas para estos usuarios. ¿Cómo voy a continuar persistiendo estos tiempos de espera, o hay algún módulo que ya ayude con esto?Persistir setTimeout y setInterval en reiniciar Node.js

+0

¿No puedes usar el nodo cron para esto? – albertjan

+1

¿Cómo es eso? Estos no son trabajos de cron que estoy configurando, son tiempos de espera de 10-30 segundos según las interacciones del usuario con la aplicación. –

+0

Puede usar beanstalkd para eso. Incluso puede persistir. – Alfred

Respuesta

1

Guardaría los tiempos de inicio y las duraciones en Redis y reiniciaría los temporizadores incompletos cuando vuelva a cargar la aplicación. Algunos módulos Redis:

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

+0

¿Cómo determinarías que la aplicación se bloqueará? ¿O actualizarás start_time/duration en redis cada segundo? –

1

setTimeOut lleva retraso, como parámetro, por lo que la hora de establecer el tiempo de espera, la captura de 'currentServerTime + delay' decir 'serverTriggerTime' y persistir en este DB. Luego, al reiniciar el servidor, cree el mismo temporizador usando el serverTriggerTime. Luego, delay = serverTriggerTime - currentServerTime, use este retraso para establecer un nuevo temporizador.

Al configurar el temporizador

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

al reiniciar el servidor:

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

Además, establecer nuevo temporizador sólo si no ha alcanzado newDelay> = 0, es decir, el tiempo de disparo y que va a pasar después de un tiempo newDelay .

Cuestiones relacionadas