Socket.io отправляет сообщение всем клиентам, кроме того, который изначально отправил исходное сообщение - PullRequest
0 голосов
/ 24 июня 2018

У меня есть два или более клиентов, подключенных к комнате Socket.io, клиент # 1 отправляет сообщение следующим образом:

export function appendChild({ item }){
  socket.emit(APPEND_CHILD, { item })
  return {
    type: APPEND_CHILD,
  }
}

это успешно отправленное сообщение на сервер, которое выглядит следующим образом:

socket.on('APPEND_CHILD', async ({ item }) => {
  ...
  socket.in(socket.handshake.query.room).emit('APPEND_CHILD_AFTER_EFFECT', { payload: { log, parentLog }, socketId: socket.id })
})

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

Клиенты прослушивают входящие сообщения, например:

socket.on('APPEND_CHILD_AFTER_EFFECT', ({ payload, socketId }) => {
        console.log('test !')
        ...
      })

Все клиенты, кроме активного (тот, который отправил первоначальный выброс), получили сообщение.

Почему основной клиент не получил сообщение и как его сделать?

1 Ответ

0 голосов
/ 24 июня 2018

как @ guico33 из Discord заметил, что я использовал socket объект вместо io при передаче всем клиентам.

io.on('connect', socket => {
    socket.on('event', message => { 
        socket.in(room).emit(...) 
    })
})

Это должно выглядеть так:

  io.in(socket.handshake.query.room).emit(message, data)

вместо:

  socket.in(socket.handshake.query.room).emit(message, data)

Вместо socket.in(room).emit(...) я должен был использовать io.in(room).emit(...), чтобы отправить ответ всем, включая отправителя.

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