Uso node.js con la clase NET para conectar varias Rasperry Pi.
//Server const net = require('node:net'); const server = net.createServer(); //Client const tcpConnect = net.createConnection(SERVERINFO);Por lo tanto, puedo registrar fácilmente múltiples clientes, abrir/cerrar flujos. Todo funciona sin ningún problema.
Pero ahora me di cuenta de que las devoluciones de llamada.
tcpConnect.on('end', () => { console.log('end triggered') }); tcpConnect.on('close', () => { console.log('close triggered') }); tcpConnect.on('error', () => { console.log('error triggered') });no funcionen si el servidor sufre un corte de energía repentinamente (por ejemplo, se desconecta la fuente de alimentación). Los clientes no activan un error, finalizan o cierran, por lo que no puedo cerrar la conexión correctamente. Como resultado, no se desencadena un error hasta el próximo intento de escribir algo en una secuencia existente. Pero esta no es una opción para mí, especialmente para el "monitoreo en línea".
¿Alguien sabe una forma de identificar el apagado del servidor inmediatamente?
Debe habilitar TCP keep-alive para que el cliente detecte que el servidor ya no responde y puede ajustar la frecuencia con la que comprueba una conexión inactiva. (He escrito una descripción genérica del idioma al comienzo de esta respuesta ).
En el nodo, parece que puede hacer esto: socket.setKeepAlive(true) , es decir, para que este cliente detecte que el servidor se ha ido cuando el socket está inactivo:
//Client const tcpConnect = net.createConnection(SERVERINFO); tcpConnect.setKeepAlive(true);