問題タブ [gen-server]
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.
erlang - なぜErlangの終了理由は正常なのですか?
全て
ログの一部:
理由が正常であるのに、なぜエラーログを報告するのですか? 助けてくれてありがとう~~~
erlang - gen_server にスーパーバイザーを追加しました。すぐにシャットダウンしますか?
編集:以下。
監視対象の gen_server がすぐにシャットダウンするのはなぜですか?
アプリケーションで必要なコマンド チェーンをより明確にするために、これらの組織名を付けます。最初に「assembly_line_worker」から開始し、後で「marketing_specialist」を監視ツリーに追加します...
ceo_supervisor.erl
assembly_line_worker_supervisor.erl
assembly_line_worker.erl
何が起きているかというと、アセンブリ ライン ワーカーは、ceo_supervisor:start_link(#innovative_ideas{}) コマンドが呼び出された直後に送信されるいくつかのメッセージを受信するなど、いくつかの作業を行ってからシャットダウンします。理由はありますか?コンソールへの io:format であるため、gen_server がいくつかのメッセージを受信していることはわかっています。
ありがとう!
編集:私は erlsrv.exe を介して Windows でこれをホストしています。次のような関数を介してプログラムを起動すると、次のことがわかりました。
...この関数がすぐに終了すると、スーパーバイザー / gen_servers がシャットダウンします。これはすべて監督を介して元の呼び出しプロセスにリンクされているため、これが終了すると予想されます。
したがって、より良い質問は、すべての起動構成を行った後、スーパーバイザーが実行を継続できるようにするにはどうすればよいでしょうか? これらすべてをアプリケーションにラップする以外にオプションはありますか? (これは悪くない音ですが...)
掘り下げた質問をありがとう!私はそのようにして監督者についてもっと学びました。
バットマン
erlang - gen_server モジュールのプロセス ディクショナリを消去するとどうなりますか?
gen_server モジュール内のプロセス ディクショナリで遊んでいました。get() 関数を呼び出したところ、次のような結果が得られました。
プロセス ディクショナリを消去するとどうなりますか?
私はそれを消去し、すべてが正常に機能しました.child_serverで例外を生成する関数を呼び出しても、main_serverはまだ終了信号を取得できます.
sockets - erlang ソケットと gen_server - サーバー側でデータが受信されない
一言で言えば 、クライアントが接続してメッセージを送受信するソケット サーバーを作成しようとしています (Learn you some erlang tutorial http://learnyousomeerlang.com/buckets-of-socketsの sockserv コードに基づいて) サーバー側コンポーネント: スーパーバイザー - 一意で、最初から開始され、gen_server の動作を持つプロセスを生成します。 gen_server の動作 プロセス - それぞれが接続を処理します。
クライアント側: ソケットに接続し、数バイトのデータを送信してから切断するクライアント。
コードの詳細 私のコードは、提示されたチュートリアルとほとんど同じです。スーパーバイザーは同じです。gen_server コンポーネントは単純化されているため、すべてをキャッチして出力するだけの handle_info ケースが 1 つしかありません。
問題 接続は成功しますが、クライアントがデータを送信すると、サーバーはデータを受信していないかのように動作します (これが発生したときに handle_info が呼び出されることを期待しています)。
handle_info は呼び出されますが、クライアントが切断され、このイベントがメッセージで報告された場合のみです。
Erlang または Java で記述されたさまざまなクライアントをいじってみました。ソケットのアクティブ/パッシブ状態を設定しようとしました。チュートリアルの作成者は、メッセージを送信した後に {active, once} を設定します。AcceptSocket がそのように作成された後、 {active, true} を設定するだけになりました: ( gen_server proc は、スーパーバイザーによって作成された元の ListenSocket を含む状態で初期化されます)
絶対に効果がありません。handle_info は、クライアントが切断されたために接続が失われた場合にのみ呼び出されます。クライアントがデータを送信するたびに、何も起こりません。
何が問題なのですか?私はこれにかなりの時間を費やしましたが、本当にわかりません。どうもありがとう。
erlang - Erlang のビームサイズを取得するにはどうすればよいですか?
最適化が必要なレガシー Erlang プログラムがあります。このコードは、実行時に最大 20G のメモリを使用します。実行時にプロセス自体のアーラン ビーム サイズを取得する方法があるかどうか疑問に思っています。それが可能であれば、beam size>10GB の場合のように、gen_server プロセスへのすべての呼び出しを拒否することができます。助けてくれてありがとう!
erlang - erlang で gen_server のコールバック モジュールを変更するにはどうすればよいですか? (gen_server:swap_handler)
2 つのモードで実行できるアプリを構築しています。サンドボックス モードと本番モード。
サンドボックス モードでは、gen_server でデータベースに対して多くのチェックを行いたいと考えています。テーブルが存在しない場合は作成します。列が存在しない場合は追加します。列のタイプで保存したい値が許可されていない場合は、変更します。
本番モードでは、テーブルが存在しない場合、または列が値の型と一致しない場合は失敗しますが、それで問題ありません。
したがって、「case State#state.is_sandbox of true -> ...」のような面倒なコードを避けるために、gen_server に 2 つの異なるモジュールを用意し、現在のモジュールを handle_call またはハンドル情報。
本当は、サンドボックスから本番環境に移行したいだけなのですが、この方法でうまくいけば逆にうまくいくのではないかと思います。
ありがとう。
erlang - Erlang: Supervisor:start_child/2 エラーで困惑しました
Logan/Merritt/Carlson の単純なキャッシュ、Chapter 6、pp 149-169、Erlang and OTP in Action に若干の変更を加えています。これまでのところ、モジュールの名前を変更するだけで、コードの変更はありません。
アプリケーションを開始します。
アイテムを挿入します:
次のエラーが表示されます。
コードは次のとおりです。
15行目を見てください:
これは新しいアイテムなので、エラーになると思います。gridz:edit は gen_server (Logan などの sc_element) です。 create/1 のコードは次のとおりです。
gridz_sup:start_child/2 のコードは次のとおりです。
Supervisor:start_child/2 を直接実行すると、次のようになります。
gridz_edit の 51 行目は init 関数です。
直接実行すると、動作します:
だから今、私は当惑しています。私は何が欠けていますか?Supervisor:start_child/2 がエラーをスローするのはなぜですか?
ありがとう、
LRP