Erlang otp中层次结构的表示
我想深入了解一下erlang,因为我有电脑游戏背景,所以我想做一个非常简单的游戏服务器,没什么特别的。 我正在考虑建立一个由相互连接的太阳能系统组成的世界,但我不确定如何在管理者和发电服务器中表示层次结构 从一个角度来看,太阳系、行星等都是照看孩子的监督者。我想这是行不通的,因为监管者不应该存储状态,每个行星、月亮等都有一个状态。 这意味着所有东西都必须是一个genserver,这就得出了我需要创建genserver层次结构的结论。Erlang otp中层次结构的表示,erlang,structure,otp,Erlang,Structure,Otp,我想深入了解一下erlang,因为我有电脑游戏背景,所以我想做一个非常简单的游戏服务器,没什么特别的。 我正在考虑建立一个由相互连接的太阳能系统组成的世界,但我不确定如何在管理者和发电服务器中表示层次结构 从一个角度来看,太阳系、行星等都是照看孩子的监督者。我想这是行不通的,因为监管者不应该存储状态,每个行星、月亮等都有一个状态。 这意味着所有东西都必须是一个genserver,这就得出了我需要创建genserver层次结构的结论。 这与监控程序和genserver的概念有什么关系?通常,在多个
这与监控程序和genserver的概念有什么关系?通常,在多个
genu服务器之间分割状态是个好主意,但内容层次结构不必与监控树连接。你可以阅读更多关于
一般来说,当你想到主管时,你会想到崩溃。比如说,控制月球状态的genu服务器
崩溃。问题是:地球是否依赖于月球的状态?如果是,那么你必须在月球坠毁后重新启动地球gen_服务器
,这是一种预感,他们必须在一个主管的领导下,采用one_for_all
重新启动策略。如果它们是独立的,你可以让你所有的天体都在一个管理者的领导下,采用一对一的重启策略,这与实际的内容层次结构无关
如果您决定需要该层次结构,可以这样做:
- application supervisor
+ universe gen_server
- univserse supervisor
+ solar system gen_server
- solar system supervisor
+ planet gen_server
- planet supervisor
+ moon gen_server
+ moon2 gen_server
+ another solar system gen_server
- another solar system supervisor
根据重启策略,现在您可以重启整个宇宙,如果宇宙gen_server
崩溃,或者当它的一个卫星崩溃时重启整个星球,因为您还可以决定在它的一个子系统崩溃时让父管理器崩溃
因此-首先考虑gen_服务器如何相互依赖,如果可以的话-使它们尽可能独立。然后,检查发生故障时所需的监控树和重启策略的形状。我有一种预感,您在这里尝试合并两个不同的概念:1)您编写的应用程序模型和2)您想要操作的世界/数据模型。等我有空的时候,我会详细说明的。可能是这样。非常感谢你的帮助。啊,好的。这意味着我将创建我的内容层次结构(月亮是孩子,如果地球就是),作为gen_服务器,例如列表,并且监控树“只是”用于自动重新启动系统。这是有道理的。我把太多的注意力放在了等级制度方面。非常感谢。现在请记住这将如何影响游戏性。月球是一个区域,地球是另一个区域吗?如果是这样,为什么月球上的每个人都会因为地球区域崩溃而被弹回呢?在提交到层次结构之前,请考虑您希望如何将映射组合在一起。但是现在写一些东西,无论你选择哪种方式,你都会学到任何东西——我的全部要点是考虑你的监督树会如何影响你的游戏/ UI /可用性等。