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

230
Vistas
Socket.io HTML: envíe contenido único a la página HTML de clientes únicos

Estoy usando NodeJS y Socket.io. Recibo una consulta del usuario (https://localhost:3000?id=12345) y, al usar esta consulta, quiero enviar contenido exclusivo a este usuario específico. Ahora mi problema es que todos los clientes obtienen datos de acuerdo con la última consulta del último cliente. He intentado hacer habitaciones y muchas otras soluciones que he pensado o encontrado en línea, pero sin suerte.

Estoy recibiendo la consulta de la página así,

 app.get('/', async ({ query }, response) => { ... }

Cliente

 $(document).ready(function () { socket.emit('room', key); socket.on('a1', function (data) { $("#a1").empty().append(data); }); socket.on('a2', function (data) { $("#a2").empty().append(data); }); socket.on('a3', function (data) { $("#a3").empty().append(data); }); socket.on('a4', function (data) { $("#a4").empty().append(data); }); …

Servidor

 io.on('connection', function (socket) { console.log('Connection'); socket.removeAllListeners(); socket.on('create', function (data) { console.log(`Data: ${data}`); socket.join(data); io.in(data).emit('a1', a1); io.in(data).emit('a2', a2); io.in(data).emit('a3', a3); io.in(data).emit('a4', a4); }) }); …

Realmente no puedo entender cómo separar la consulta de cada cliente del servidor y luego enviar contenido único a cada cliente sin que el contenido de un cliente interfiera con otro. Mi idea inicial fue hacer una sala por cliente y enviar su contenido único usando esa sala, pero por alguna razón, es como si el contenido terminara en cada cliente.

¡Muchos gracias!

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Es solo girar el objeto utilizado para administrar mejor el contenido de esta manera:

El lado del cliente:

 $(document).ready(function () { const userKey = 'unique-id-for-each-user' socket.emit('room', {key : key, userKey : userKey}); //if you emit something in this channel (same as userKey) on server will get here socket.on(userKey, function (data) { if(data.key === 'a1') $("#a1").empty().append(data.content); if(data.key === 'a2') $("#a2").empty().append(data.content); if(data.key === 'a3') $("#a3").empty().append(data.content); }); //if you emit something in this channel ('allClients') on server will get here socket.on('allClients', function(data) { if(data.key === 'a1') $("#a1").empty().append(data.content); if(data.key === 'a2') $("#a2").empty().append(data.content); if(data.key === 'a3') $("#a3").empty().append(data.content); }) });

El lado del servidor:

 io.on('connection', function (socket) { console.log('Connection'); socket.removeAllListeners(); socket.on('room', function (data) { console.log(`Data: ${data}`); if(data.key === 'a1') io.sockets.emit(data.userKey, {key : 'a1', content: a1}); if(data.key === 'a2') io.sockets.emit(data.userKey, {key : 'a2', content: a2}); if(data.key === 'a3') io.sockets.emit(data.userKey, {key : 'a3', content: a3}); if(data.key === 'a4') io.sockets.emit(data.userKey, {key : 'a4', content: a4}); }) });

Como ves, solo cambio la variable que pasas como parámetro para darme lo que necesito, tanto del lado del servidor como del lado del cliente.

about 4 years ago · Juan Pablo Isaza 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