1

特定の状態で gen_server を起動できるかどうかを調べようとしています。

このサーバーがクラッシュしたときに、最後の有効な状態でサーバーを再起動するモニター/スーパーバイザーをセットアップできるようにしたいと考えています。

この問題に取り組む方法についての提案は大歓迎です。

これまでのところ、私の唯一のアイデアは、呼び出されたときにサーバーの状態を目的の状態に変更する特別な handle_call/3 を用意することですが、サーバー モジュールの変更を避け、可能であればモニター/スーパーバイザー プロセスから純粋に処理したいと考えています。

お時間をいただきありがとうございます。

4

1 に答える 1

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

于 2012-03-19T08:47:38.980 に答える