¿Cómo puede un enchufe? io nombre de la habitación se pasa desde el extremo frontal hasta el extremo trasero?

Actualmente estoy haciendo una aplicación que está utilizando React.js en el extremo frontal y Node.js en el extremo posterior. Durante el desarrollo, descubrí que necesitaba usar tomas de corriente para reflejar cambios en tiempo real a todos los usuarios de una habitación en particular. Para ello, estoy usando este código en mi backend Node.js:

io.emit("name", {
           action: "action",
           data: data
       });

y luego para recibir las peticiones en mi parte delantera estoy haciendo esto:

import openSocket from "socket.io-client";
const socket = openSocket(url);
socket.on("name", (data) => {
      ... logic
});

Mientras este código funciona, actualmente estoy emitiendo información a todos los jugadores que están conectados a mi socket. Sin embargo, sólo quiero emitir información a los jugadores en una determinada habitación. La parte que no entiendo es cómo contar el socket. io que usuarios están en una determinada habitación. Leí la documentación y el concepto de habitaciones parece ser sólo un lado del servidor, y añadir un reproductor a una habitación este código se puede utilizar:

io.on('connection', socket => {
  socket.join('some room');
});

Pero el nombre de la habitación que quiero que esta conexión en particular se almacene en mi parte delantera. ¿Hay una manera de pasar estos datos desde el extremo frontal hasta el extremo posterior para que pueda ser utilizado cuando se hace "conexión"? Si no, ¿cómo consigo la habitación que necesito? ¡Gracias!

Pregunta hecha hace 3 años, 4 meses, 26 días - Por cyberscribe


2 Respuestas:

  • Para lograr pasar el nombre de la habitación desde el extremo frontal hasta el extremo posterior, una forma de hacerlo es enviando el nombre de la habitación junto con la conexión inicial del socket en el extremo frontal a través de un mensaje de autenticación o configuración.

    En el extremo frontal, puedes enviar el nombre de la habitación al conectarte al socket de la siguiente manera:

    javascript
    import openSocket from "socket.io-client";
    const socket = openSocket(url);
    socket.emit("joinRoom", { roomName: "nombre_de_la_habitacion" });
    
    socket.on("name", (data) => {
          ... lógica
    });
    

    En el extremo posterior, puedes escuchar el evento "joinRoom" para manejar la conexión a la habitación específica:

    ``javascript io.on('connection', socket => { socket.on('joinRoom', ({ roomName }) => { socket.join(roomName); console.log(Usuario se ha unido a la habitación ${roomName}`); });

    socket.on("disconnect", () => { // Manejar la salida del usuario de la habitación socket.leave(roomName); console.log(Usuario ha abandonado la habitación ${roomName}); }); }); ```

    De esta manera, al enviar el nombre de la habitación desde el extremo frontal al extremo posterior al conectarse al socket, puedes controlar a qué habitación se une cada usuario en particular. Esto te permitirá emitir información específica a los jugadores en una determinada habitación en lugar de a todos los usuarios conectados al socket. ¡Espero que esto te sea de ayuda! Si tienes alguna otra pregunta, no dudes en decírmelo.

    Respondida el Dec 21, 2020 a las 23:02 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Claro, puedes pasar el nombre de la habitación desde el extremo frontal al extremo posterior utilizando el objeto de consulta de la solicitud de conexión del socket. Aquí tienes cómo hacerlo:

    Extremo frontal (React.js):

    javascript
    // Crea un socket y pásale el nombre de la habitación como parámetro de consulta
    const socket = io({
      query: {
        room: 'nombre-de-la-habitacion'
      }
    });
    

    Extremo posterior (Node.js):

    javascript
    // Escucha los eventos de conexión y obtén el nombre de la habitación del objeto de consulta
    io.on('connection', (socket) => {
      const room = socket.handshake.query.room;
    
      // Únete a la habitación especificada
      socket.join(room);
    
      // ...
    });
    

    Ahora, puedes emitir eventos a una habitación específica utilizando el método to():

    Extremo posterior (Node.js):

    javascript
    io.to(room).emit('nombre-del-evento', {
      data: 'datos-a-enviar'
    });
    

    Esto emitirá el evento solo a los clientes que estén conectados a la habitación especificada.

    Ejemplo completo:

    Extremo frontal (React.js):

    javascript
    // Crea un socket y pásale el nombre de la habitación como parámetro de consulta
    const socket = io({
      query: {
        room: 'nombre-de-la-habitacion'
      }
    });
    
    // Escucha los eventos del socket
    socket.on('nombre-del-evento', (data) => {
      // ...
    });
    

    Extremo posterior (Node.js):

    javascript
    // Escucha los eventos de conexión y obtén el nombre de la habitación del objeto de consulta
    io.on('connection', (socket) => {
      const room = socket.handshake.query.room;
    
      // Únete a la habitación especificada
      socket.join(room);
    
      // Emite un evento a la habitación especificada
      io.to(room).emit('nombre-del-evento', {
        data: 'datos-a-enviar'
      });
    
      // ...
    });
    

    Respondida el Dec 21, 2020 a las 23:13 - por Gemini

    Votos positivos: 0 | Votos negativos: 0