Javascript Socket.io匹配

Javascript Socket.io匹配,javascript,socket.io,Javascript,Socket.io,我正在为一个项目工作,在这个项目中,我必须制作一个多人战舰游戏,我已经完成了大部分游戏逻辑(客户端为Angular 6,服务器端为node.js+express),但由于我是socket.io的新手,我目前一直在坚持这一点,我已经成功地将此设置下来,尝试连接两名玩家: var waitingPlayer = null; ios.on('connection', (socket) => { console.log('new user connected'); if (wai

我正在为一个项目工作,在这个项目中,我必须制作一个多人战舰游戏,我已经完成了大部分游戏逻辑(客户端为Angular 6,服务器端为node.js+express),但由于我是socket.io的新手,我目前一直在坚持这一点,我已经成功地将此设置下来,尝试连接两名玩家:

var waitingPlayer = null;

ios.on('connection', (socket) => {
    console.log('new user connected');
    if (waitingPlayer == null) {
        waitingPlayer = socket;
        waitingPlayer.emit('waitingOpponent', {
            text: "waiting for an opponent"
        });
    } else {
        console.log('Match Found');
        waitingPlayer.emit('matchFound', {
            text: "Match Found",
        });
        socket.emit('matchFound', {
            text: "Match Found"
        });
    }
});

如果我尝试这样做,似乎有两个以上的用户可以连接在一起,有没有一种方法可以在同一个游戏中的两个用户之间进行某种形式的游说,然后为以后连接的用户进行更多的游说?我已经查阅了一些文档,但找不到太多。

使用带有Socket IO的房间听起来不错。您可以动态创建房间,Socket IO基本上为您管理房间。因此,您可以为每个单独的“战斗”或游戏创建一个房间。把两个用户放在游戏室里。之后,你可以专门向那个房间广播。您需要以某种方式跟踪房间,但这应该为您提供一个起点。如果每个游戏都有自己的唯一ID,则房间名称可以是该ID。然后,您可以在需要时广播到特定的房间ID

加入:

var gameId = "game_1234";
io.on('connection', function(socket){
  socket.join(gameId);
});
发射:

io.to(gameId).emit('some event');

看起来你需要重置waitingPlayer。哦,好吧,我没有意识到,但是我怎么能在游戏中的两个用户之间交换数据呢?