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
Respuesta
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
¿Cómo determinarías que la aplicación se bloqueará? ¿O actualizarás start_time/duration en redis cada segundo? –
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 .
- 1. setInterval/SetTimeOut valor de retorno
- 2. jQuery reiniciar el temporizador setInterval
- 3. node.js: setInterval() omitiendo llamadas
- 4. JavaScript setTimeout setInterval dentro de una función
- 5. ¿Cómo funciona setTimeout en Node.JS?
- 6. node.js, método de devolución de llamada setTimeout y "this"
- 7. Reiniciar un setInterval() en Javascript/jQuery (sin clearInterval)
- 8. Cómo reiniciar un servidor node.js
- 9. Fundido de animación | jQuery vs js puro | setInterval vs. setTimeout
- 10. ¿Node.js impone un retraso mínimo para setTimeout?
- 11. jQuery - ¿Cómo reiniciar setInterval después de matarlo con clearInterval?
- 12. IE8 setInterval y setTimeout se activa inmediatamente después de 49 días de actividad
- 13. Reiniciar la aplicación Node.js con init.d
- 14. En Node.js, ¿setTimeout() bloquea el bucle de evento?
- 15. Node.JS: setTimeout que no mantiene el proceso en ejecución
- 16. Cómo detener "setInterval"
- 17. setTimeout y "this" en JavaScript
- 18. ¿Cómo puedo mostrar una lista de cada subproceso en ejecución generado por setTimeout/setInterval
- 19. ¿Por qué node.js maneja setTimeout (func, 1.0) incorrectamente?
- 20. Javascript setInterval y `this` solución
- 21. Cómo usar setInterval y clearInterval?
- 22. setTimeout en la función asíncrona
- 23. ¿Por qué la gente dice que javascript eval() es malo pero no objeta contra setTimeout y setInterval, etc.?
- 24. javascript setInterval
- 25. setInterval devuelve Timer Object y no intervalId
- 26. Mejores prácticas para usar y persistir enumeraciones
- 27. primavera @Transactional fusionar y persistir pregunta
- 28. setInterval y funciones de larga duración
- 29. ¿Cómo usar setInterval en PHP?
- 30. setTimeout en Firefox
¿No puedes usar el nodo cron para esto? – albertjan
¿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. –
Puede usar beanstalkd para eso. Incluso puede persistir. – Alfred