Seguí un tutorial y pude copiar/construir una aplicación web simple en tiempo real. Entiendo todo, desde el código, excepto una cosa. El evento 'desconectar'. Eliminé la mayor parte del código para simplificarlo, pero es así:
//server.js io.on('connection', (socket) => { //...I removed code from here for simplification socket.on('disconnect', () => { socket.broadcast.emit('user-disconnected', users[socket.id]); delete users[socket.id]; }) }) //client.js //...a lot of code removed from here for simplification socket.on('user-disconnected', myname => {appendMessage(`${myname} left`)} )Para mi sorpresa, este código funciona y cuando un usuario cierra la ventana o sale de la página, agrega el mensaje que dejó el usuario, pero ¿cómo sabe que el usuario se fue? Hasta donde yo sé, la palabra 'desconectar' es solo una cadena sin otro significado semántico, ¿verdad? Quiero decir, no es como, por ejemplo, la función addEventListener('click') que 'click' es un evento integrado que significa algo. Según tengo entendido, los eventos en socket.io son palabras 'inventadas' por el programador para ayudar con la comunicación servidor/cliente, ¿verdad? Por lo tanto, no entiendo cómo salir de la página activa el evento de 'desconexión' aquí. ¿Alguien me ilumina, por favor?
El evento de disconnect es un evento integrado de socket.io que le indica cuándo se desconecta un cliente.
El JavaScript del cliente socket.io usa el detector de eventos beforeunload en la ventana, que se ejecuta antes de que se cierre la pestaña, luego envía un mensaje de "Voy a morir" al servidor y luego desaparece.
El servidor también puede intentar hacer ping al cliente y si nada regresa, ¡ups!, desconectado.
Por otro lado, el cliente puede desconectarse manualmente del servidor con:
socket.disconnect();Esto envía un mensaje de desconexión al servidor y luego se desconecta. Puede volver a conectarse con:
socket.connect();