es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

SocketIO no está emitiendo a otro espacio de nombres en el lado del servidor.

Así que he estado investigando los espacios de nombres y no puedo parecer encontrar qué es lo que estoy haciendo mal, estoy tratando de lograr que cuando el CLIENTE A envíe una solicitud de ACTUALIZACIÓN, quiero que el servidor transmita a través de otro espacio de nombres.

CLIENTE A

const a = io("/spaceA")
a.emit("UPDATE")

CLIENTE B

const b = io("/spaceB")
b.on("newupdate", () => {
    console.log("actualización recibida")
})

SERVIDOR

const a = io.of('/spaceA')
const b = io.of('/spaceB')

a.on('connection', (socket) => {
    socket.on("UPDATE", () => {
        b.emit("sendupdate")
    })
})

b.on('connection', (socket) => {
    socket.on("sendupdate", () => {
        socket.broadcast.emit("newupdate")
    })
})

No importa lo que haya probado, no puedo lograr que se active el “sendupdate” desde el SOCKET B.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema puede estar con el nombre del evento que se emite desde el CLIENTE A. En el código del servidor, el evento de socket que se está escuchando es “UPDATE”, pero en el código del cliente, se está emitiendo “UPDATE” sin ningún nombre adicional de evento.

    Para solucionar esto, el código del Cliente A debe actualizarse para incluir un nombre de evento al emitir el evento “UPDATE”, de la siguiente manera:

    const a = io('/spaceA');
    a.emit('UPDATE', {data: "algún dato"});
    

    Además, también puede haber un problema con el nombre del evento que se utiliza en el código del servidor. En la función de devolución de llamada “a.on(‘connection’)”, el evento de socket que se está escuchando es “UPDATE”, pero en la función de devolución de llamada “socket.on(‘UPDATE’)”, se está emitiendo “sendupdate”.

    Para solucionar esto, la línea “b.emit(‘sendupdate’)” debe actualizarse para emitir el evento “UPDATE” en su lugar:

    a.on('connection', (socket) => {
      socket.on("UPDATE", () => {
        b.emit("UPDATE");
      });
    });
    

    Luego, en la función de devolución de llamada “b.on(‘connection’)”, el evento de socket que se está escuchando debe coincidir con el que se está emitiendo desde el Cliente B:

    b.on('connection', (socket) => {
      socket.on("UPDATE", () => {
        socket.broadcast.emit("newupdate");
      });
    });
    

    Con estas actualizaciones, el evento “sendupdate” debería ser emitido desde el Cliente A y recibido por el Cliente B a través del evento “newupdate”.

Comments are closed.