如何解决如何在 Elixir 中为主管树建模
假设我有一个 Zone 动态主管(zone 是一个 genserver),每个 Zone 都有自己的 Player 动态主管(player 是一个 genserver)。
所以每个区域都有很多玩家,而我有很多区域。
这样做的方法是否只是将 Player 主管的 PID 存储在 Zone GenServer 中?
这是正确的方法吗?然后当我开始一个区域时也开始一个玩家主管?
这纯粹是概念性的,我是做这种事情的新手。我也很感激任何有关这方面的学习资源!
解决方法
只是为了将 PlayerSupervisor
的 PID 存储在 ZoneGenServer
中?
如果 PlayerSupervisor
由于某种原因崩溃,这将不够健壮。一种方法是使 ZoneGenServer
陷阱存在于相应的 PlayerSupervisor
并在 PlayerSupervisor
崩溃时崩溃,但这意味着您正在实现已提供的 OTP 的一部分。我会采用以下方法(ZoneSupervisor
以 :rest_for_one
strategy 开头,所有其他以 :one_for_one
开头):
————————————————————
| ZoneSupervisor |
————————————————————
⇓ ⇓
———————————————————— ——————————————————
| PlayerSupervisor | | ZoneGenServer |
———————————————————— ——————————————————
⇓
————————————————————
| PlayerGenServer |
————————————————————
现在,当我们可以安全避免崩溃时,唯一要做的就是让 ZoneGenServer
意识到 PlayerSupervisor
。这可以通过询问 ZoneSupervisor
关于它的孩子和/或通过 name registration 和 {:via,module,term}
来完成。使用 PID
作为进程处理程序很容易受到进程重启(由于崩溃等)的影响。PID
更改,注册名称不会。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。