es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

NodeJS v12.18.1 SetInterval deja de funcionar después de unos días.

Estoy utilizando una función setInterval para enviar un ping cada minuto, el problema es que después de un número arbitrario de días, el callback de setInterval ya no se ejecuta. Soy consciente del problema que se solucionó en la v10.9.0 https://github.com/nodejs/node/issues/22149, pero esto está sucediendo en la versión 12, y no después de 25 días.

Esta es una versión simplificada de lo que estoy utilizando setInterval para:

startPing() {
console.log(comenzará a enviar pings en 60 segundos)
this.pingInterval = setInterval(() => {

console.log("enviando ping", new Date())
this.socket.write('ping');
// Si no se recibe respuesta después de whenToTimeout segundos, invocar timeout para intentar reconectar.
const whenToTimeout = 30 * 1000
this.socket.setTimeout(whenToTimeout);

}, 60 * 1000)
}

Después de leer acerca de los problemas con setInterval, he decidido usar node-cron por ahora, sé que utiliza setTimeout bajo el capó, pero también tenemos un proceso en ejecución usando esto, y no se detiene incluso cuando el proceso de ping se detiene.

Lo que me pregunto es si alguien ha enfrentado este problema antes, y si alguien ha encontrado una manera de replicarlo (no pude hacerlo usando libfaketime), porque incluso si uso el paquete de node-cron, todavía quiero asegurarme de que es setInterval lo que estaba causando el problema.

PD. He tratado de buscar algún posible problema de fuga de recursos, pero no he encontrado ninguno, y el proceso está funcionando bien aparte del proceso de ping que se detiene.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Explicación del problema con setInterval en Node.js versión 12

    El usuario está experimentando un problema con la función setInterval en Node.js versión 12 donde la función de devolución de llamada deja de ejecutarse después de un número arbitrario de días. Este problema fue corregido anteriormente en la versión 10.9.0, pero todavía ocurre en la versión 12.

    El usuario ha implementado una versión simplificada de la función setInterval para enviar pings cada 60 segundos. También han intentado usar node-cron como solución alternativa, pero quieren asegurarse de que el problema esté en setInterval.

    El usuario ha comprobado su código en busca de problemas de fuga de recursos, pero no ha encontrado ninguno. Están buscando formas de replicar el problema y determinar la causa raíz del problema.

Comments are closed.