Socket.io两个客户端仅在一个方向上进行通信

时间:2019-01-07 19:32:05

标签: javascript node.js reactjs express socket.io

我正在使用React和Express构建一个简单的socket.io应用程序,遇到了两个客户端在相互发送数据时遇到问题的问题。
例如:播放器1连接到服务器,然后播放器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 :(得分:0)

我只需移动即可解决问题

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

另一个函数要比包含 socket.emit 的函数早执行。
需要在任何数据到达之前设置处理程序。