2012-03-19 10 views
1

私は与えられた状態でgen_serverを起動できるかどうかを調べようとしています。gen_serverタイプのアプリケーションの状態を設定する

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

この問題にどのように対処するかについてのご意見は非常に歓迎されます。

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

ありがとうございます。

答えて

2

gen_server:initは引数Argをとります。任意の状態を渡して、サーバーの状態として設定することができます。あなたはArgを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に渡す必要はありません。あなたは記憶喪失を開始したくない場合は、ETSを使用することができます。私はあなたのアイデアaを好き

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

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

+0

(ETSを作成し、サーバーが死亡したときに、ETSが破壊されることに注意してください)あなたのgen_serverからそれを死ぬし、使用することはありませんいくつかのプロセスでは、公共ETSを作成します。ロット。ご協力ありがとうございました –

関連する問題