将数据分配给套接字

时间:2013-06-24 16:22:36

标签: node.js express socket.io

我正在使用Socket.io,node.js和express来制作一个可以在线播放的简单双人游戏。到目前为止,我在这个主题上找到的所有东西要么不能解决我的问题,要么比我追求的要复杂得多。

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

2 个答案:

答案 0 :(得分:2)

您可以将属性添加到各个套接字,如下所示:

io.sockets.on('connection', function(socket){
    socket.name = 'John';
    console.log(socket.name); // prints out 'John'
});

答案 1 :(得分: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()方法不必担心线程安全,因为只有一个事件线程。