我试图找出是否可以启动具有给定状态的 gen_server。
我希望能够设置一个监视器/主管,当此服务器崩溃时,它会以其最后一个有效状态重新启动服务器。
任何关于如何解决这个问题的建议都将非常受欢迎。
到目前为止,我唯一的想法是有一个特殊的 handle_call/3 在调用时将服务器状态更改为所需的状态,但我想避免修改服务器模块并尽可能从我的监视器/主管进程中处理这个。
感谢您的时间。
我试图找出是否可以启动具有给定状态的 gen_server。
我希望能够设置一个监视器/主管,当此服务器崩溃时,它会以其最后一个有效状态重新启动服务器。
任何关于如何解决这个问题的建议都将非常受欢迎。
到目前为止,我唯一的想法是有一个特殊的 handle_call/3 在调用时将服务器状态更改为所需的状态,但我想避免修改服务器模块并尽可能从我的监视器/主管进程中处理这个。
感谢您的时间。
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 被销毁)