0

我正在使用 Socket.io、node.js 和 express 制作一个可以在线玩的简单的两人游戏。到目前为止,我在该主题上发现的所有内容要么没有解决我的问题,要么比我所追求的要复杂得多。

本质上,我希望玩家能够加入一个房间(我已经解决了),并且当在一个房间中时,需要为每个玩家分配“玩家 1”和“玩家 2”属性。我想将播放器 1 分配给第一个连接的用户,将播放器 2 分配给第二个,但我还没有弄清楚如何将值/变量分配给单个套接字连接。

4

2 回答 2

2

您可以像这样向单个套接字添加属性:

io.sockets.on('connection', function(socket){
    socket.name = 'John';
    console.log(socket.name); // prints out 'John'
});
于 2013-06-24T16:53:28.320 回答
1

看起来您正在寻找的内容应该非常简单。我喜欢@iheartramen 的回答,除了它很难确定哪些套接字属于哪个房间。我要做的是保留房间列表,以及属于它们的套接字:

var _rooms = [
  {
    id: 'Some Unique Room ID',
    playerSockets: []
  }
  //...
}

然后,当玩家连接到给定房间时,您只需将他们的连接添加到列表中:

io.sockets.on('connection',function(socket){
    var room = getRoom();   // however it is you're mapping rooms...
                            // this returns a reference to a room object
                            // in the _rooms array
    // you can cap the number of players here
    socket.playerNumber = room.sockets.length+1;
    room.sockets.push( socket );
}

现在你有了后向和前向映射。您不必担心该push()方法的线程安全性,因为只有一个事件线程。

于 2013-06-24T16:59:50.137 回答