【问题标题】:Socket.io two clients communicating only in one directionSocket.io 两个客户端只在一个方向通信
【发布时间】:2019-06-02 11:42:23
【问题描述】:

我正在使用 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 })
  })

【问题讨论】:

  • 您的客户似乎只在他们发出邀请后才设置他们的邀请处理程序。第二个玩家没有收到邀请可能是因为他们还没有发出邀请,因此还没有办法处理邀请。
  • @daviscodesbugs 它有效,谢谢!现在说得通了。

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


【解决方案1】:

我通过简单的移动解决了这个问题

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 2021-06-21
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 2017-08-07
    • 2020-12-17
    相关资源
    最近更新 更多