Socket.io два клиента общаются только в одном направлении - PullRequest
0 голосов
/ 07 января 2019

Я создаю простое приложение socket.io с использованием React и Express и столкнулся с проблемой, когда у двух клиентов возникают проблемы с отправкой данных друг другу.
Например: Player 1 подключается к серверу, а затем Player 2.
Игрок 1 может получить приглашение от Игрока 2, но в противоположной ситуации нет. Тот, который подключается вторым к серверу, похоже, не получает приглашения.

Журнал консоли от Игрока 1:

Sending an invitation to player:  029bdef2-7f1b-43a0-9d3e-02ff79728a6e
Invitation from 029bdef2-7f1b-43a0-9d3e-02ff79728a6e

Журнал консоли от Игрока 2:

Sending an invitation to player:  83a594c4-4dae-47a2-90c4-339e1d55d287

Журналы с консоли сервера:

from: 2ad4f74f-ca78-4e96-80c6-9d3ff810681c
to:
beccb53f-3b8a-4ea6-994e-93eae19df715
from:
beccb53f-3b8a-4ea6-994e-93eae19df715
to:
2ad4f74f-ca78-4e96-80c6-9d3ff810681c

Код моего клиента:

invitationHandler = ({ id = null, socketId = null }) => {
    console.log('Sending an invitation to player: ', id)
    const { socket } = this.props
    socket.emit(INVITATION, { id, socketId })
    socket.on(INVITATION, ({ id }) => {
      console.log('Invitation from ' + id)
    })
  }

Код сервера:

socket.on(INVITATION, ({ id = null, socketId = null }) => {
    console.log('from: ')
    console.log(socket.user.id)
    console.log('to: ')
    console.log(id)
    socket.to(socketId).emit(INVITATION, { id: socket.user.id })
  })

1 Ответ

0 голосов
/ 08 января 2019

Я решил проблему простым перемещением

socket.on(INVITATION, ({ id }) => {
      console.log('Invitation from ' + id)
    })

другой функции, которая выполняется раньше, чем та, которая содержит socket.emit .
Обработчик должен быть настроен до поступления каких-либо данных.

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