Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

736
Vistas
socket.io: envía un mensaje a una habitación específica (lado del cliente)

En socket.io, normalmente usa una sintaxis específica en el lado del servidor si desea enviar un mensaje a una sala específica: io.to(room).emit('event', 'message'); .

Pero, ¿cómo indicaría un cliente (lo que quiero decir es el código relacionado con socket.io que se ejecuta en un navegador) que un mensaje debe ir a una sala específica?

¿Es común simplemente crear algo como esto (por supuesto, el servidor tiene que evaluarlo):

 socket.emit('chat message', {room: 'abc', msg: 'hello there'});

¿O la biblioteca del lado del cliente socket.io también ofrece una sintaxis específica para este propósito?

editar: para aclarar, mi sugerencia de arriba parece funcionar, simplemente no estoy seguro de si hay una solución mejor.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Prácticamente lo has descubierto. Solo el servidor puede emitir a salas específicas, porque solo el servidor está realmente conectado a varios clientes. En otras palabras, los clientes no están conectados entre sí: la biblioteca del lado del cliente solo administra las comunicaciones entre ese cliente y el servidor. Entonces, si desea que la aplicación de su cliente indique al servidor que emita un mensaje a todos los clientes conectados a una sala determinada... eso es un diseño de API básico. Podría emitir un evento de socket, o simplemente hacer una llamada http regular a una ruta en su servidor. De cualquier manera, enviará metadatos sobre a qué sala (s) debe transmitir el servidor. Sin embargo, probablemente se prefiera el primero (emitir), porque de esa manera en el lado del servidor puede usar socket.broadcast.to para emitir a todos los clientes en la sala, EXCEPTO el socket que inició la llamada (un caso de uso bastante común).

over 4 years ago · Santiago Trujillo Denunciar

0

La solución de Alapeno fue que el cliente enviara una sala específica como parte de los datos del mensaje al servidor, para que el servidor supiera a qué sala transmitir el mensaje.

Sin embargo, si solo desea que el cliente envíe un mensaje a su propia habitación , puede hacer que el servidor detecte la habitación del cliente por sí mismo a través del objeto socket.rooms . Por lo tanto, no necesitarías que el cliente enviara el nombre de su habitación como parte del mensaje como indicaste.

Cliente.js:

 socket.emit('chat message', 'hello');

Servidor.js:

 socket.on('chat message', function(msg){ var keys = Object.keys(socket.rooms); for (var i = 0; i < keys.length; i++) { io.to(socket.rooms[keys[i]]).emit('chat message', msg); } });

Actualización: el objeto socket.rooms incluye una especie de hash como el ejemplo a continuación, por lo que es mejor que lo envíe a todas las salas en socket.rooms para asegurarse de que los miembros de la sala lo reciban. No se le puede garantizar el orden de las llaves.

Ejemplo:

socket.rooms[keys[0]] = WMWlX-ekAxa8hP8FAAAE

socket.rooms[keys[1]] = app-chat-room

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda