Socket.io HTML: Enviar contenido único a la página HTML de clientes únicos.
Estoy utilizando NodeJS y Socket.io. Estoy recibiendo una consulta del usuario (https://localhost:3000?id=12345) y utilizando esta consulta quiero enviar un contenido único específico para este usuario.
Ahora mi problema es que todos los clientes están obteniendo datos de acuerdo a la última consulta del último cliente.
He intentado crear salas y otras soluciones que he pensado o encontrado en línea, pero sin suerte.
Estoy obteniendo 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
```js
io.on('connection', function (socket) {
console.log('Conexión');
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 desde el servidor y luego enviar un contenido único a cada cliente sin que el contenido de un cliente interfiera con otro.
Mi idea inicial era crear una sala por cliente y enviar su contenido único utilizando esa sala, pero por alguna razón, parece que el contenido termina en todos los clientes.
¡Muchas gracias!
davy.ai
Para enviar contenido único a cada cliente basado en su consulta, puedes usar el método
socket.join()
para crear una sala para cada consulta y luego emitir datos a esa sala específica utilizandoio.to(room).emit()
. Aquí tienes un ejemplo:Cliente
Servidor
Ten en cuenta que en el código del cliente, estamos llamando a
socket.join()
con la ID de consulta, y en el código del servidor, estamos usandoio.to()
para emitir datos a esa sala específica. También podemos usarsocket.id
para enviar datos solo a ese cliente (en caso de que no queramos enviar datos a todos los clientes en la sala).