首页 > 解决方案 > 使用 socket.io 向多个用户发送时遇到问题

问题描述

我正在从事一个教育项目 - 在线跳棋(选秀)游戏,但我仍然对 socket.io 感到不舒服。

我想要做的是 - 当一个玩家想要邀请另一个玩家到游戏室玩时,使用 socket.io 我想将两个玩家从大厅发送到游戏室。只有他们被发送到游戏室,这意味着即使大厅内有数百名玩家,也只有两个想要玩的玩家被重定向到游戏室。

当玩家 1 单击按钮时,我将他的详细信息和玩家 2 的详细信息(玩家 1 选择与之对抗的玩家)发送到服务器,如下所示:

socket.emit("SendPlayersToRoom", { player1, player2}, socket.id)

socket.id 参数是玩家 1 的 socket.id。玩家 2 是一个对象,在 player2.id 中已经包含了他的套接字 id。

接下来,我在服务器端接收信息,然后尝试仅将其发送给玩家 1 和 2,如下所示:

socket.on("SendPlayersToRoom", ({player1, player2}, id) => {
        io.to(id).to(player2.id).emit("sendToRoom");
    })

最后,我在客户端收到信息,它应该将两个玩家重定向到他们可以玩的新房间:

socket.on("sendToRoom", () => {
        location.href = `/game-room?p1=${player1.username}&p2=${player2.username}`                
    })

这段代码实际发生的情况是玩家 1(发起游戏邀请的人)被发送到没有玩家 2 的房间,玩家 2 呆在大厅里,好像什么都没发生一样。

我在这里想念什么?我究竟做错了什么?

标签: javascriptsocket.ioserver-sideclient-side

解决方案


您的房间有一个唯一的 ID。确保两个套接字都加入它。socket.join(id) - 将它用于你的两个套接字。


推荐阅读