设置gen_server类型应用程序的状态

时间:2012-03-19 08:42:39

标签: error-handling erlang monitor gen-server

我试图找出是否可以启动具有给定状态的gen_server。

我希望能够设置一个监视器/管理程序,当该服务器崩溃时,它会以最后一个有效状态重新启动服务器。

关于如何解决这个问题的任何建议都非常欢迎。

到目前为止,我唯一的想法是有一个特殊的handle_call / 3,在调用时将服务器状态更改为所需的状态,但我想避免修改服务器模块并尽可能完全从我的监视器/监督程序进程处理

感谢您的时间。

1 个答案:

答案 0 :(得分:2)

gen_server:init接受参数Args。您可以传递所需的任何状态,并将其设置为服务器的状态。您可以将Args传递给start_link,它会将它传递给init。

http://www.erlang.org/doc/man/gen_server.html#Module:init-1

http://www.erlang.org/doc/man/gen_server.html#start_link-3

我认为在您的情况下,您可能希望将状态存储在mnesia中。这样您就不必将最后一个有效状态传递给gen_server。如果您不想启动mnesia,您可以使用ETS。在一些不会死的流程中创建公共ETS并从gen_server中使用它(请注意,当创建ets的服务器死亡时,ets会被破坏)

http://www.erlang.org/doc/man/ets.html

http://www.erlang.org/doc/man/mnesia.html

相关问题