在重新启动崩溃的进程时,什么是保持状态的好方法?
我在一个动态口令应用程序中有一个监控器,它监视几个“子系统”gen_servers。
例如,一个是“天气”子系统,它每15分钟生成一个新的天气状态,并处理对当前天气状态的查询。(想想lemonade stand游戏)
如果gen_server崩溃,我希望重新启动它,但应该使用最新天气状态重新启动它,而不是使用init()中硬编码的某种任意状态重新启动。仅仅因为崩溃,模拟状态突然从“冰川风暴”变成“愉快和微风”,这是没有意义的。
我不太愿意在每次更新后使用mnesia或ETS来存储状态,因为这样会增加复杂性;有没有更简单的方法?
发布于 2009-05-11 06:48:59
只要它必须在运行时出现,就会建议使用ETS。到目前为止,这个值远远大于复杂性。API很简单,如果您正在处理命名表,那么访问也很简单。您只需在主管启动gen_server之前创建该表。
两个更复杂的选择:
发布于 2009-05-11 10:35:27
有没有更简单的方法?
当进程死亡时,它会向supervisor发送包含进程状态的消息,因此您可以使用此值存储在supervisor中(在mnesia或supervisor的状态中),当您的服务器将启动时(在init中),它必须向supervisor发送同步调用以获取State值。我没有真正的例子,但我希望它是有意义的。
无论如何,我真的不认为在记忆中存储State有什么问题。
对不起,我的英语:)
https://stackoverflow.com/questions/846312
复制相似问题