我正在尝试找出是否可以在给定状态下启动gen_server。
我希望能够设置一个监视器/监控器,以便在服务器崩溃时重新启动服务器,使其具有最后一个有效状态。
任何关于如何解决这个问题的建议都将非常受欢迎。
到目前为止,我唯一的想法是有一个特殊的handle_call/3,它在被调用时将服务器状态更改为所需的状态,但我希望避免修改服务器模块,并在可能的情况下完全从我的监视器/监控器进程处理此问题。
谢谢您抽时间见我。
发布于 2012-03-19 16:47:39
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
我认为在您的情况下,您可能希望将状态存储在记忆中。这样,您就不必考虑将最后一个有效状态传递给gen_server。如果你不想开始记忆,你可以使用ETS。在一些不会死的进程中创建公共ETS,并在您的gen_server中使用它(请注意,当创建ets的服务器死掉时,ets将被销毁)
http://www.erlang.org/doc/man/ets.html
http://www.erlang.org/doc/man/mnesia.html
https://stackoverflow.com/questions/9767127
复制相似问题