Erlang otp中层次结构的表示

Erlang otp中层次结构的表示,erlang,structure,otp,Erlang,Structure,Otp,我想深入了解一下erlang,因为我有电脑游戏背景,所以我想做一个非常简单的游戏服务器,没什么特别的。 我正在考虑建立一个由相互连接的太阳能系统组成的世界,但我不确定如何在管理者和发电服务器中表示层次结构 从一个角度来看,太阳系、行星等都是照看孩子的监督者。我想这是行不通的,因为监管者不应该存储状态,每个行星、月亮等都有一个状态。 这意味着所有东西都必须是一个genserver,这就得出了我需要创建genserver层次结构的结论。 这与监控程序和genserver的概念有什么关系?通常,在多个

我想深入了解一下erlang,因为我有电脑游戏背景,所以我想做一个非常简单的游戏服务器,没什么特别的。 我正在考虑建立一个由相互连接的太阳能系统组成的世界,但我不确定如何在管理者和发电服务器中表示层次结构

从一个角度来看,太阳系、行星等都是照看孩子的监督者。我想这是行不通的,因为监管者不应该存储状态,每个行星、月亮等都有一个状态。 这意味着所有东西都必须是一个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 /可用性等。