将另一个用户移动到具有Socket.io的房间

时间:2017-09-09 00:28:53

标签: node.js sockets socket.io

我正在使用Socket.io和Node.js,我希望将用户配对并将它们发送到新房间。

当用户连接时,在io.on('connection')内我确定它们与等待在数组中配对的用户的兼容性。

如果已加入的用户与等待用户兼容,我想将它们移动到新房间。

这是我目前的做法。注意:[1029387,1983934,9243802]是一组用户ID。

var pendingPlayers = {
    "spelling": {
        "level1":[1029387,1983934,9243802],
        "level2":[]
     }
}


io.on('connection', function(socket) {
    // check compatibility
    // move current player and other queued player to new room
});

我唯一的想法就是从服务器到客户端socket.emit('room', 'new room name');,让排队的播放器将此ID发送回服务器,然后使用:

io.on('connection', function(socket) {
    socket.on('room', function(room) {
        socket.join(room);
    });
});

然而,将房间名称发送到客户端,然后将其发送回服务器似乎非常牵强。我希望有一种更简单的方法。

感谢您的建议。

2 个答案:

答案 0 :(得分:1)

根据你的评论

  

如果在pendingPlayers对象中已经没有玩家   各个级别,加入游戏的用户被添加到   pendingPlayers对象。

不是转移到对象,而是只为此级别的玩家创建一个新房间。现在当新玩家根据你的评论来时

  

然后,下一个请求加入相应级别的玩家将会   与来自阵列的.push()编辑的玩家ID配对   对应那个级别。

让下一位玩家加入上述房间。

答案 1 :(得分:1)

也许你需要像战舰游戏那样的逻辑。它被用于临时的“候诊室”。我在这里找到了: https://github.com/inf123/NodeBattleship/blob/master/server.js

io.on('connection', function (socket) {

  //firstly add player to room until opponent aren't come
  socket.join('waiting room');

  joinWaitingPlayers();
});

function joinWaitingPlayers () {
  var clients = [];
  for (var id in io.sockets.adapter.rooms['waiting room']) {
    clients.push(io.sockets.adapter.nsp.connected[id]);
  }

  if (clients.length >= 2) {
    //if we have a couple, then start the game
    var game = new Game();

    // live "waiting room"
    clients[0].leave('waiting room');
    clients[1].leave('waiting room');
    // and then join both to another room
    clients[0].join('game' + game.id);
    clients[1].join('game' + game.id);

  }
}