Socket.io对接会

时间:2018-10-17 14:08:20

标签: javascript socket.io

我正在为一个必须制作多人战舰游戏的项目工作,我已经完成了大多数游戏逻辑(客户端为Angular 6,服务器端为node.js + express),但是由于我是socket.io的新手,因此我目前对此颇为棘手,我设法做到这一点来尝试连接2个播放器:

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"
        });
    }
});

如果我尝试这样做,似乎可以将2个以上的用户连接在一起,是否有办法在将要玩同一游戏的2个用户之间建立某种游说方式,然后为将要连接的用户提供更多的游说方式后?我已经查阅了一些文档,但是找不到很多。

1 个答案:

答案 0 :(得分:1)

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

加入:

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

发射:

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

https://socket.io/docs/rooms-and-namespaces/

相关问题