Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 博弈状态的单一真理来源_Node.js_Multiplayer_Real Time Multiplayer - Fatal编程技术网

Node.js 博弈状态的单一真理来源

Node.js 博弈状态的单一真理来源,node.js,multiplayer,real-time-multiplayer,Node.js,Multiplayer,Real Time Multiplayer,我是游戏开发的新手,我想用node.js创建一个多人游戏服务器 我想知道,在服务器上保持和更改游戏状态最常用的技术和模式是什么 我的游戏状态大小很小,所以我认为最好的地方是存储它的内存 我想扩大我的服务器游戏,这样每个玩家都可以连接到不同的服务器 我担心同时发生的事件会改变不同服务器中的游戏状态,因此拥有单一的真相来源在某种程度上是复杂的,因为每个服务器上的状态可能会不同步 简言之,构建基于回合的多人游戏的常用方法是什么?服务器必须实现一些逻辑来控制游戏流程,例如改变回合,在玩家不活动的情况下改

我是游戏开发的新手,我想用node.js创建一个多人游戏服务器 我想知道,在服务器上保持和更改游戏状态最常用的技术和模式是什么

我的游戏状态大小很小,所以我认为最好的地方是存储它的内存

我想扩大我的服务器游戏,这样每个玩家都可以连接到不同的服务器

我担心同时发生的事件会改变不同服务器中的游戏状态,因此拥有单一的真相来源在某种程度上是复杂的,因为每个服务器上的状态可能会不同步

简言之,构建基于回合的多人游戏的常用方法是什么?服务器必须实现一些逻辑来控制游戏流程,例如改变回合,在玩家不活动的情况下改变游戏状态


我也不知道如何防止状态重启服务器,可能是redis可以保存状态,但失去控制器后如何控制游戏流程首先,我认为最好从中央服务器的一个小模型开始,“在不同服务器上更改游戏状态”可能不适合你的游戏,即使它合适,你可以在简单的尝试之后再做。第一件重要的事情是让游戏按照您的意愿运行,并且尽可能简单

然后我们讨论了如何构建一个基于回合的多人游戏。对于这样的游戏,您至少需要以下几样东西

  • 玩家信息
    • 静态的总信息(玩家数量、回合数、玩家顺序、玩家位置、本回合正在运行的玩家)
    • 每个玩家的信息(姓名、ID、金钱、其他)
  • 地图管理器
    • 在每个网格中都会发生事情
    • 特殊事件或其他游戏机制
之后,这里是服务器的中心逻辑。我们至少需要以下功能:

  • ProcessNetwork()接收包并向其他人发送信息
    • 玩家操作的结束
    • 这些事件发生在一个/多个玩家身上
    • 几个参与者的互动
  • 选中end()以查看游戏是否结束
  • CheckPlayer()检查是否需要将操作交给下一个玩家,或者是否是下一轮

这是中央控制器最简单的模型,你可以改变它,只要它们可以工作。之后,你可以让游戏变得越来越复杂。

游戏状态是什么意思,你是指游戏的不同阶段或步骤吗?如果你能更清楚地描述你的游戏的细节,这会更好地帮助你。“游戏状态”是一个类的实例,它是一个对象。该对象具有一些属性,如回合数、玩家、每个玩家的规则、每个玩家的实时计数、切换回合、接受玩家拥有回合的命令、拒绝其他玩家没有拥有回合的命令、跳过非活动玩家的回合,以及…所以这是一款类似垄断的游戏?是的,非常感谢您的回复,我在开发游戏服务器本身方面没有问题,我的问题是,当我为每个游戏室配备一台服务器(一个线程)时,可以扩展,管理状态很容易,因为每个游戏室我只有一个状态,但是当我为每个游戏室配备多台服务器时,我必须在不同的服务器中同步多个游戏状态,我担心边缘情况,就像比赛条件一样,还有一件事让我困惑:为什么需要在不同的服务器上同步多个游戏状态。我认为每个有一些玩家的游戏都可以被视为一个完整的游戏,如果你想同步不同游戏的状态,你是说所有玩家都在一个游戏中玩吗?我有很多游戏室,每个游戏室都有很多玩家,因为我想将我的游戏扩展到百万个游戏室和10个玩家,我有两个选择,将一个房间中的每个玩家完全路由到同一个线程或具有多个游戏状态并同步他们我知道第一种方法足够好,但我想在开始开发之前了解更多第二种方法我想知道如何使用第二种方法和同步状态开发我的游戏(我可以与pub sub同步)我的问题是边缘案例
void run()
{
    while (!bGameEnd)
    {
        ProcessNetwork();
        CheckEnd();
        CheckPlayer();
    }
}