【问题标题】:Setting state of a gen_server type application设置 gen_server 类型应用程序的状态
【发布时间】:2012-04-03 18:12:36
【问题描述】:

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

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

非常欢迎任何有关如何解决此问题的建议。

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

感谢您的宝贵时间。

【问题讨论】:

    标签: error-handling erlang monitor gen-server


    【解决方案1】:

    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

    【讨论】:

    • 我非常喜欢你的想法。感谢您的帮助
    猜你喜欢
    • 2014-03-14
    • 2010-10-21
    • 1970-01-01
    • 2019-07-10
    • 2017-06-17
    • 2017-09-23
    • 2011-05-15
    • 2022-10-06
    • 1970-01-01
    相关资源
    最近更新 更多