【问题标题】:Assigning data to a socket将数据分配给套接字
【发布时间】:2013-06-25 00:59:50
【问题描述】:

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

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

【问题讨论】:

    标签: node.js express socket.io


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      看来您要查找的内容应该很简单。我喜欢@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() 方法的线程安全性,因为只有一个事件线程。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多