我的插座怎么能放在房间里,这样客户就会收到消息



我正在React中用Socket.io和Node构建一个小游戏。但我遇到了一个问题,客户没有收到任何发送到房间的消息。我在Node.js服务器中使用以下代码:

服务器

app.js

io.on("connection", (socket) => {
initGame(io, socket);
});

game.js

exports.initGame = function (sio, socket) {
socket.on("joinGameRoom", joinGameRoom);
socket.on("logSocket", logSocket);
};
function logSocket() {
let sock = this;
console.log(sock.rooms);
}
async function joinGameRoom(data) {
let sock = this;
let game = data.game;
await sock.join(String(game._id));
await sock.in(String(game._id)).emit("playerJoined", game);
await sock.emit("game", game);
}

客户端

game.js

socket.on("playerJoined", (data) => {
setGame(() => data);
console.log("player joined!");
});

client/game.js中的侦听器从未被调用。当我调用LogSocket时,该插座所在的唯一房间;是它自己的房间。但其他电话一直在被打;调用类似于";游戏">

客户端

game.js

socket.on("game", (data) => {
setGame(() => data);
console.log("game Call");
});

所以我的问题是:我在这里做错了什么?为什么我的插座会自己离开房间?

所以我的问题与React有关。

我在React客户端中连接了useEffect((钩子中的套接字。这个钩子使我的组件在连接调用时重新应答;这使得组件在每次重新发送时都会得到一个新的套接字。因此,插座之前连接的房间仍然存在,但客户有了一个新插座。

因此,我通过启动顶部组件中的套接字并将其传递给React.Context.来解决这个问题

这不是一个答案,但我需要更多的堆栈点来添加注释,这就是我在这里发布的原因。我是否正确理解您使用useContext来监听前端顶级组件(例如App.js(中的事件。并通过ThemeContext将套接字侦听器传递给您的孩子组件(game.js等(?

相关内容

最新更新