Erlang 如何在Elixir中建模主管树
假设我有一个区域动态管理器(区域是一个genserver),每个区域都有自己的玩家动态管理器(玩家是一个genserver) 所以每个区域都有很多玩家,我有很多区域 这样做的方法仅仅是将玩家主管的PID存储在区域GenServer中吗 这是正确的方法吗?然后当我开始一个区域时,也开始一个球员监督 这纯粹是概念性的,我对做这类事情还不熟悉。我也会很感激这方面的任何学习资源 只需将Erlang 如何在Elixir中建模主管树,erlang,elixir,gen-server,erlang-supervisor,Erlang,Elixir,Gen Server,Erlang Supervisor,假设我有一个区域动态管理器(区域是一个genserver),每个区域都有自己的玩家动态管理器(玩家是一个genserver) 所以每个区域都有很多玩家,我有很多区域 这样做的方法仅仅是将玩家主管的PID存储在区域GenServer中吗 这是正确的方法吗?然后当我开始一个区域时,也开始一个球员监督 这纯粹是概念性的,我对做这类事情还不熟悉。我也会很感激这方面的任何学习资源 只需将PlayerSupervisor的PID存储在ZoneGenServer 如果PlayerSupervisor因某种原因
PlayerSupervisor
的PID存储在ZoneGenServer
如果PlayerSupervisor
因某种原因崩溃,这将不够健壮。一种方法是使ZoneGenServer
陷阱存在于相应的PlayerSupervisor
中,并在PlayerSupervisor
崩溃时崩溃,但这意味着您正在实现已经提供的OTP的一部分。我将使用以下内容(Zones Supervisor
以开头,所有其他内容以开头:一对一
):
现在,当我们能够安全地防止崩溃时,唯一的办法就是让ZoneGenServer
了解PlayerSupervisor
。可以通过询问有关其子项的ZoneSupervisor
和/或使用{:via,module,term}
来完成。将PID
用作进程处理程序易受进程重新启动的影响(由于崩溃等)。PID
更改后,注册的名称不会更改
————————————————————
| ZoneSupervisor |
————————————————————
⇓ ⇓
———————————————————— ——————————————————
| PlayerSupervisor | | ZoneGenServer |
———————————————————— ——————————————————
⇓
————————————————————
| PlayerGenServer |
————————————————————