Erlang 如何在Elixir中建模主管树

Erlang 如何在Elixir中建模主管树,erlang,elixir,gen-server,erlang-supervisor,Erlang,Elixir,Gen Server,Erlang Supervisor,假设我有一个区域动态管理器(区域是一个genserver),每个区域都有自己的玩家动态管理器(玩家是一个genserver) 所以每个区域都有很多玩家,我有很多区域 这样做的方法仅仅是将玩家主管的PID存储在区域GenServer中吗 这是正确的方法吗?然后当我开始一个区域时,也开始一个球员监督 这纯粹是概念性的,我对做这类事情还不熟悉。我也会很感激这方面的任何学习资源 只需将PlayerSupervisor的PID存储在ZoneGenServer 如果PlayerSupervisor因某种原因

假设我有一个区域动态管理器(区域是一个genserver),每个区域都有自己的玩家动态管理器(玩家是一个genserver)

所以每个区域都有很多玩家,我有很多区域

这样做的方法仅仅是将玩家主管的PID存储在区域GenServer中吗

这是正确的方法吗?然后当我开始一个区域时,也开始一个球员监督

这纯粹是概念性的,我对做这类事情还不熟悉。我也会很感激这方面的任何学习资源

只需将
PlayerSupervisor
的PID存储在
ZoneGenServer

如果
PlayerSupervisor
因某种原因崩溃,这将不够健壮。一种方法是使
ZoneGenServer
陷阱存在于相应的
PlayerSupervisor
中,并在
PlayerSupervisor
崩溃时崩溃,但这意味着您正在实现已经提供的OTP的一部分。我将使用以下内容(
Zones Supervisor
以开头,所有其他内容以
开头:一对一
):

现在,当我们能够安全地防止崩溃时,唯一的办法就是让
ZoneGenServer
了解
PlayerSupervisor
。可以通过询问有关其子项的
ZoneSupervisor
和/或使用
{:via,module,term}
来完成。将
PID
用作进程处理程序易受进程重新启动的影响(由于崩溃等)。
PID
更改后,注册的名称不会更改


           ————————————————————
           |  ZoneSupervisor  |
           ————————————————————
               ⇓          ⇓
————————————————————  ——————————————————
| PlayerSupervisor |  |  ZoneGenServer |
————————————————————  ——————————————————
         ⇓
————————————————————
|  PlayerGenServer |
————————————————————