我正在使用Socket.io,node.js和express来制作一个可以在线播放的简单双人游戏。到目前为止,我在这个主题上找到的所有东西要么不能解决我的问题,要么比我追求的要复杂得多。
基本上,我希望玩家能够加入一个房间(我已经解决了),而在一个房间里,需要为每个玩家分配“玩家1”和“玩家2”属性。我想将播放器1分配给第一个连接用户,将播放器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()
方法不必担心线程安全,因为只有一个事件线程。