Erlang 如何遍历相同类型的多个GenServer?
问题:我有一个类型Erlang 如何遍历相同类型的多个GenServer?,erlang,elixir,gen-server,Erlang,Elixir,Gen Server,问题:我有一个类型FlyServer,需要迭代所有Fly过程。用于服务器上的各种计算 我如何做到这一点 一个选项是有一个包含所有FlyServer进程的GenServer列表。但如果它崩溃了呢?如果一个播放器崩溃了,而且不管出于什么原因,跟踪进程的GenServer没有得到通知,那该怎么办?如果这种情况不现实,请插话 每次飞行进程与服务器联系时,您都可以将其pid添加到列表中,该列表是gen_服务器状态的一部分 然后,服务器可以监控Fly进程,这意味着当Fly进程终止时,服务器将收到一条特殊消息
FlyServer
,需要迭代所有Fly
过程。用于服务器上的各种计算
我如何做到这一点
一个选项是有一个包含所有FlyServer进程的GenServer列表。但如果它崩溃了呢?如果一个播放器崩溃了,而且不管出于什么原因,跟踪进程的GenServer没有得到通知,那该怎么办?如果这种情况不现实,请插话
terminate(Reason,State)
,该模块可以将状态保存到ets、dets或mnesia表中。当然,如果有人在连接运行FlyServer的服务器和电源插座的电线上绊倒,则执行将立即停止,并且不会调用terminate()
。有关解决方案,请参见分布式erlang
然后在回调模块中调用
terminate(Reason,State)
,该模块可以将状态保存到ets、dets或mnesia表中。当然,如果有人在连接运行FlyServer的服务器和电源插座的电线上绊倒,则执行将立即停止,并且不会调用terminate()
。有关解决方案,请参见分布式erlang。我建议您使用主管启动服务器,并呼叫主管:start\u child/2。主管应使用“一对一”策略,旨在创建和监督同类流程
然后,您可以使用函数supervisor:which_children/1获得所有孩子的更新列表。我建议您使用一个supervisor启动服务器,并调用supervisor:start_children/2。主管应使用“一对一”策略,旨在创建和监督同类流程
然后,您可以使用功能主管获得所有儿童的更新列表:哪个儿童/1您的确切用例是什么?您是否考虑过使用Phoenix Presence?当进程加入时,您可以让它们在上面注册。每当流程离开或加入时,您都会收到一条包含不同元数据的消息。在任何时候,您都可以查询活动进程的列表,并在必要时为它们设置标志(例如,指示它们处于不同的状态)如何迭代多个GenServer…?--你的题目和你的问题似乎不匹配。您的问题似乎表明您有一个
gen_server
(FlyServer)和多个客户端(Fly)进程。使用主管启动它们怎么样?并使用supervisor:which_children/1遍历它们。您的确切用例是什么?您是否考虑过使用Phoenix Presence?当进程加入时,您可以让它们在上面注册。每当流程离开或加入时,您都会收到一条包含不同元数据的消息。在任何时候,您都可以查询活动进程的列表,并在必要时为它们设置标志(例如,指示它们处于不同的状态)如何迭代多个GenServer…?--你的题目和你的问题似乎不匹配。您的问题似乎表明您有一个gen_server
(FlyServer)和多个客户端(Fly)进程。使用主管启动它们怎么样?并使用supervisor:which_children/1遍历它们。