tutorial socket rooms example node.js real-time socket.io

node.js - rooms - ¿Cómo evitar crear una nueva conexión de socket en socket.io después de actualizar la página html?



socket.io server (2)

He intentado socket.io, encontré cuando se cargó la página html del cliente, se creó una nueva conexión de socket. Cuando actualizo la página, encontré que se creó una nueva conexión de socket y luego se desconectó la conexión anterior.

Mi problema es ¿cómo evitar esto? Porque estoy construyendo una aplicación de sala de chat. Cuando un usuario ingresa a la página de la sala, en "conexión", el lado del servidor emite "Welcome user xxx come!" Y el evento "desconectar" emite "User xxx leaved". Pero cuando un usuario actualiza la página actual, esto activará nuevamente el evento ''desconectar'' y filtrará el evento ''conectado''. Y se emitirá "¡Bienvenido usuario xxx ven!" y "Usuario xxx con hojas". mensajes juntos

¿Cómo ignorar el evento de actualización de la página? ¿Y al igual que la sesión http?

Actualización : ya he encontrado la manera de resolver el problema. de esta pregunta Manejar navegador recargar socket.io


No puede bloquear la actualización de la página, y no hay manera de evitar que socket.io se desconecte cuando un usuario actualiza la página.

Yo sugeriría agregar un tiempo de espera:

  • Cuando vea a un usuario desconectarse, inicie un temporizador, digamos 10-30 segundos
  • Si un usuario regresa al chat mientras el temporizador no ha terminado, no haga nada.
  • Si un usuario no ha regresado después de que finalice el temporizador, muestre el mensaje "el usuario ha dejado"

Puedes usar sesiones. Aunque el zócalo se desconecta cuando se realiza una actualización, aún podría retener algunos datos de ese usuario en particular y usarlos cada vez que el zócalo se conecte nuevamente.

Así es como usas las sesiones:

var express = require(''express''); var MemoryStore = require(''express'').session.MemoryStore; app.use(express.cookieParser()); app.use(express.session({ secret: "keyboard cat", store: new MemoryStore({ reapInterval: 60000 * 10 })})); app.get(''/'', function(req,res){ req.session.name ="clients_name"; res.render(__dirname + ''/index.jade'',{user:req.session.name}); });

y debes usar jade o cualquier otro "motor de visualización" para obtener los datos que se pasan a la página.