gpt4 book ai didi

node.js - 具有多个 Node 的多人游戏服务器

转载 作者:可可西里 更新时间:2023-11-01 11:35:23 25 4
gpt4 key购买 nike

假设您正在制作一个反恐精英服务器。我们有一个大厅和多个房间,游戏 session 在其中进行。

I.E 我有 3 个 Node 服务器、nginx 负载平衡器、redis。

SCHEMA

我正在使用带有 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 收到有关已创建游戏的信息并单击加入按钮时,客户端将向服务器发送请求,在 Node 2 上不会有 user_1 创建的游戏实例。

我希望,你会明白我在说什么(我的英语不好)。

我想,游戏实例的 currentGames 对象必须是全局对象,适用于所有 Node 。但我不知道怎么办。

我应该使用 redis 或 mongo 或其他东西来存储游戏信息,而不是 variable 吗?

我走错路了吗?

最佳答案

你也应该在 Redis、房间和游戏实例中同步游戏状态。
我有一些笔记:
+ Entity State - 管理游戏状态,存储和设置,获取游戏信息到Redis
+ 客户端状态 - 每个连接客户端都有客户端状态并与实体状态同步,游戏循环中的每个滴答声,您检查实体状态和客户端状态之间的差异并将其发送给客户端并更新游戏客户端

关于node.js - 具有多个 Node 的多人游戏服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35184899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com