Counter-Strike サーバーを作成しているとします。1 つのロビーと、ゲーム セッションが行われる複数の部屋があります。
IE 3 ノード サーバー、nginx ロード バランサー、redis があります。
私はredisアダプターでsocket.ioを使用しているので、任意のサーバー上のすべてのクライアントにメッセージを送信できます。
一つ理解できません。たとえば、次のようなものがあります。
var currentGames = {};
socket.on('createGame', function(gameName){
var game = new Game();
game.addPlayer(socket.id);
currentGames.push();
// ... Send to all clients, that game created and they can join
});
socket.on('joinGame', function(gameName){
currentGames[gameName].addPlayer(socket.id);
// ... Send to all players of this game, that player joined
});
socket.on('walk', function(gameName, coordinates){
currentGames[socket.id].walk(player, coordinates);
// ... Get all players positions and send to clients
});
class Game
{
gameName;
players = {};
score;
constructor(name){
this.gameName = name;
}
addPlayer(player){
players[name] = new Player(player);
}
walk(id, coordinates){
this.players[id].updatePosition(coordinates);
}
}
class player
{
id;
life = 100;
coordinates = {0,0,0};
kills;
death;
constructor(id){
this.id = id;
}
updatePosition(coords){
this.coordinates = coords;
}
}
たとえば、このコードを書きました。
たとえば、user_1 は node-1 にあり、user-2 は node-2 にあります。
user_1 がゲームを作成すると、インスタンスが作成され、node-1 に保存されます。
そのため、user_2 が作成されたゲームに関する情報を受け取り、参加ボタンをクリックすると、クライアントはサーバーにリクエストを送信し、ノード 2 には user_1 が作成したゲーム インスタンスは存在しません。
私が話していることを理解していただければ幸いです (私の英語は上手ではありません)。
currentGames
ゲームインスタンスのオブジェクトは、すべてのノードに対してグローバルでなければならないと思います。しかし、方法がわかりません。
ゲーム情報の保存には、代わりに redis や mongo などを使用する必要がありvariable
ますか?
私は間違った方法で行っていますか?