问题:我有一个FlyServer
类型,需要遍历所有Fly
进程。用于服务器上的各种计算。
我如何做到这一点?
一个选择是拥有所有FlyServer进程的GenServer列表。但是,如果崩溃了怎么办?而且,如果播放器崩溃了,并且由于某种原因而没有通知GenServer跟踪进程怎么办-如果这种情况不切实际,请发出提示。
答案 0 :(得分:4)
我建议您使用主管来启动服务器,并调用supervisor:start_child / 2。主管应使用simple_one_for_one策略,该策略旨在创建和监督相同类型的流程。
然后您可以使用功能supervisor:which_children / 1
获取所有儿童的更新列表。答案 1 :(得分:2)
每次Fly进程与服务器联系时,您都可以将其pid添加到列表中,该列表是gen_server状态的一部分。
然后服务器可以 const fullpage = new fullpage('#fullpagediv', { normalScrollElements: '.scroll-box' })
Fly进程,这意味着当Fly进程终止时,服务器将收到一条特殊消息。
服务器可以实现一个接收子句,该子句的模式与特殊消息匹配,然后从列表中删除终止的进程的pid。
一个选择是拥有所有FlyServer进程的GenServer列表。 但是,如果崩溃了怎么办?
然后将在回调模块中调用monitor
,该模块可以将State保存到ets,dets或mnesia表中。当然,如果有人通过将运行FlyServer的服务器连接到电源插座的电线绊倒,则执行将立即停止,并且不会调用terminate(Reason, State)
。有关解决方案,请参见terminate()
。