【问题标题】: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() 方法的线程安全性,因为只有一个事件线程。