我正在使用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 })
})
答案 0 :(得分:0)
我只需移动即可解决问题
socket.on(INVITATION, ({ id }) => {
console.log('Invitation from ' + id)
})
另一个函数要比包含 socket.emit 的函数早执行。
需要在任何数据到达之前设置处理程序。