問題タブ [gen-fsm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
890 参照

erlang - gen_fsm erlang タイムアウト

gen_fsm タイムアウトについて質問があります。2 つの状態を持つ gen_fsm のセットがあるとしましょう (将来はそれ以上になる可能性があります):idleこれは開始状態とworking.

gen_fsm は 5 秒ごとに特定のパラメータをチェックし、それに従って に留まるか、idleまたは に移動しworkingます。gen_fsm が に移動するときはいつでも、workingメッセージを ( を使用してgen_fsm:send_all_state_event/2) 他のすべての gen_fsm にidle送信workingworkingます。

ここで重要なのは、ステート タイムアウトに偏りを持たせたくないということです (たとえば、マシンがworking3 秒間待機してメッセージを受信するとどうなるでしょうか? 5 秒のタイムアウトは有効ではありません。何があっても一定のタイムアウト (これは、一定の時間にタイムアウト メッセージをトリガーする必要があることを意味します)。

now()とを使用する私のソリューションの重要な部分は次のとおりtime:now_diff/2です。とにかく小さなドリフトがありますが、ほんの数秒について話しているので、公平に思えます。

それは有効だと思いますか?

0 投票する
1 に答える
593 参照

erlang - gen_server/gen_fsm をノードからノードに転送する方法

gen_server/gen_fsm を erlang ノード A から erlang ノード B に移動し、その内部状態を保持するための推奨される方法 (ある場合) を知りたいです。

0 投票する
1 に答える
225 参照

unit-testing - タイムアウトの eunit テスト

gen_fsm が実際に eunit でタイムアウトすることをテストするにはどうすればよいですか?

0 投票する
2 に答える
252 参照

erlang - gen_fsm の状態を別のモジュールの関数に変更する

Erlang の gen_fsm モジュールを使用してメニュー オプションを管理するかなり大きな USSD アプリケーションがあります。

menus_fsm.erl現在のバージョンには、 5000 行以上の gen_fsm 関連コードを含む単一のファイルがあります。menus_fsm.erl次のバージョンでは、個別のファイルに分割して、将来の保守を容易にする機会が与えられます。

古いバージョンでは、ヘルプ メニューを表示するには、次のようにします (help_menu/1メイン メニューを表示する図示されていないコードから呼び出されます)。

FSM へのエントリ ポイントなどを示す多くのコードを省略しました。

新しいバージョンでは、次のように、から呼び出される新しいモジュールにhelp_menu/1とを移動したいと考えています。waitHelpMenuChoice/2help_menumenus_fsm

問題は次の行にあります{next_state, waitHelpMenuChoice, StateData, ?MENU_TOUT};:モジュールにあることがgen_fsm期待されているため、開始した場所に戻ります。waitHelpMenuChoicemenus_fsm

問題のある行を次のように置き換えようとしました

しかし、それは次のようなエラーにつながるだけです: {badarg,[{erlang,apply,[conv_fsm,#Fun<help_menu.waitHelpMenuChoice.2>,[]]}

これを回避する方法について何か提案はありますか?

0 投票する
1 に答える
173 参照

erlang - Erlang - スーパーバイザーと gen_fsm での例外終了

calculadoralog_calculadoraおよびの3 つのモジュールがありsupervisor_calculadoraます。Calculadoragen_fsm を使用して合計、減算、乗算、および除算を行う単純な計算機であり、スーパーバイザーはスーパーバイザーの動作を実装します。Calculadora はうまく動作calculadoraしますが、除算 0/0 または例外を作成したときにモジュールを再起動する必要があるスーパーバイザーを試してみると、機能しません。なんで?

PD: モジュールlog_calculadoraは、私が行った操作をcalculadoralog.txt ファイルに書き込むだけです。TEST モジュールは、私に例外終了を与えるモジュールです。

電卓:

スーパーバイザー:

テストモジュール

0 投票する
1 に答える
247 参照

erlang - この場合、どのErlangの動作、つまりgen_serverまたはgen_fsmを使用する必要がありますか

特定のトランザクションについて SOAP Web サービスにクエリを実行するソリューションを開発しています。これらのトランザクションは、取得されるとデータベースに保存され、その後コールバック URL が呼び出されてデータが別のサーバーに送信されます。この問題の解決策をどのように設計するのが最善でしょうか? 私の混乱のポイントは、gen_server または gen_fsm のどちらを使用する必要があるかということです。使用する場合、ソリューションのどのコンポーネントがどこに行くのか、つまり gen_server の場合、どのタスクがサーバーに送られ、どのタスクがクライアントに送られるのかということです。