Socket.io не отправляет на одну розетку в комнате - PullRequest
0 голосов
/ 27 марта 2020

Я использую socket.io для обработки некоторых взаимодействий между сервером и клиентом и создания матчей для простой многопользовательской игры.

(на данный момент) я автоматически объединяю двух игроков, добавляя их в сокет. моя комната. Когда в комнате 2 игрока, я посылаю событие «startGame» в комнату, используя socket.to(ROOM).emit(EVENT, EVENT_MSG) после проверки

на стороне сервера nodeJS:

game_start_state = checkRooms(socket, freeRooms);
if (game_start_state){
        console.log("told room", game_start_state, "to start their game!")
        socket.to(game_start_state).emit("startGame", game_start_state);
      }

, но пока только первый сокет, подключенный к комнате, получает сообщение о событии «startGame», я осмотрелся и не видел никого другого с такой же проблемой. Ниже приведен код, который запускается после того, как клиент отправляет событие, сообщающее, что он хочет присоединиться к комнате.

на стороне сервера nodeJS:

function checkRooms(socket, roomArray) {
// auto-matchmaking logic

  if(!roomArray || !roomArray.length){
    //if there is no room with space create a new one
    const room = uuid();
    r_list.push(room);    // r_list is just an array used to keep track of opened rooms for displaying to the user through some html
    freeRooms.push(room); // freeRooms is an array with rooms with just 1 socket connected
    joinRoom(socket, room);
    return(null);

  } else {
    // if there is a room with a space, try to connect the client to it
    const room = freeRooms[0];
    console.log(socket.id, "wants to join", room);
    // connect client to rooms
    joinRoom(socket, room);
    // room is now full so start the game
    freeRooms.pop(room);
    return(room);
  }
}

, поскольку на данный момент существует только автоматическое сопоставление , в массиве freeRooms будет только 1 комната, так что я не беспокоюсь об этом.

Кто-нибудь знает, где я могу испортить? При необходимости может предоставить больше примеров кода.

1 Ответ

0 голосов
/ 27 марта 2020
socket.to(room).emit(...)

отправляет каждому члену комнаты ЗА ИСКЛЮЧЕНИЕМ указанного сокета. Вы можете увидеть это документально здесь .

Если вы хотите отправить всем, кто находится в комнате, используйте:

io.to(room).emit(...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...