問題タブ [erlang-otp]
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 - OTP simple_on_for_one スーパーバイザーで既存の子を確認する
OTP を学習するために map/reduce ワード カウンターを作成しています。レデューサーを開始できる simple_one_for_one スーパーバイザーを作成しました。すべてのキーについて、すでに子が存在するかどうかを確認したいと思います。存在しない場合は、スーパーバイザーに子を作成させます。
私は現在、次のようにスーパーバイザー モジュールで子を開始します。
私はこのようなことをしたいと思います(未テスト):
Key の子が既に存在するかどうかを調べる OTP の良い方法は何ですか?
tcp - OTPの原則を使用したノンブロッキングTCPサーバー
私はErlangを学び始めているので、「Hello、world!」を書こうとしています。並行プログラミングのIRCボット。
私はすでに、OTPの優れた機能(スーパーバイザー、アプリケーションなどの動作)なしでErlangを使用して作成しました。OTPの原則を使用して書き直そうとしていますが、残念ながら、OTPを使用してソケットプログラミングを行う「正しい」方法を理解できません。
別のプロセスを手動で作成してスーパーバイザーにリンクするのが唯一の合理的な方法のようですが、確かに誰かが以前にこれを行ったことがあるでしょう。
erlang - Erlang: 分散アプリケーションの奇妙な動作
私は分散型の erlang アプリケーションで支払いをしています。
構成とアイデアは以下から引用されてい
ます: http://www.erlang.org/doc/pdf/otp-system-documentation.pdf 9.9. 分散アプリケーション
- 3 つのノードがあります: n1@a2-X201、n2@a2-X201、n3@a2-X201
- 便利な仕事をするアプリケーションwdがあります:)
構成ファイル:
- wd1.config - 最初のノードの場合:
- 2 番目の wd2.config:
- ノード n3 の場合も同様です。
3 つの別々のターミナルで erlang を起動します。
- erl -sname n1@a2-X201 -config wd1 -pa $WD_EBIN_PATH -boot start_sasl
- erl -sname n2@a2-X201 -config wd2 -pa $WD_EBIN_PATH -boot start_sasl
- erl -sname n3@a2-X201 -config wd3 -pa $WD_EBIN_PATH -boot start_sasl
各 erlang ノードでアプリケーションを開始します: * application:start(wd)。
現時点では、すべて問題ありません。Erlang ドキュメントに記載されているとおり: アプリケーションはノードn1@a2-X201で実行されています。
ここでノードn1を終了します: アプリケーションはn2に移行されました
ゲームを続けます: ノードn2を殺します もう一度システムが正常に動作します。ノードn3にアプリケーションがあります
ノードn1とn2を復元します。そう:
ノードn1 とn2が戻ってきました。アプリケーションを手動で再起動する必要があるようです: *最初にノードn2
で実行しましょう:
- ぶら下がったように見えます...
- n1で再起動します
できます。また、ノードn2も OK を返しました。
ノードn3では、次のことがわかります。
ノードn2でアプリケーションを開始する際の遅延を除いて、ドキュメントに書かれているように、一般的にはすべて問題ないように見えます。
ノードn1をもう一度killします。
Ops ... すべてがハングします。アプリケーションは別のノードで再起動されませんでした。
実際、この記事を書いているときに、すべてが正常に機能する場合もあれば、問題が発生する場合もあることに気付きました。
「プライマリ」ノードを復元してもう一度殺すときに問題が発生する可能性がありますが、何かアイデアはありますか?
erlang - gen_server は起動していますか?
gen_server に「スーパーバイザーがすべての gen_servers を初期化しました。メッセージを送信できるようになりました」と伝える方法はありますか?
監視ツリー内の他の gen_servers の状態を設定する仕事をしているワーカー gen_server がいます。構成サーバーの init 関数でメッセージの送信を開始すると、{noproc, _} になることがあります。これは、構成サーバーが速すぎたことを意味していると思います。スーパーバイザーがすべてのワーカーを開始するのに十分な時間がある前に、彼はメッセージを送信しました。config_server:init() に timer:sleep(500) を配置することでこれを修正しました。これにより、すべての gen_server が初期化するのに十分な時間が確保されますが、これは洗練されていないソリューションのように思えます。
これを行う適切な方法はありますか?
erlang - gen サーバーの同期呼び出しと非同期呼び出し
非同期呼び出しのみを処理する gen_server があるとします (したがって、handle_cast のみが実装されます)。handle_call を保持して、一般的な ok 値のみを返すようにするか、またはコードのその部分を削除して警告を受け入れる必要がありますか?
erlang - HTTP サービスに関する Erlang 設計アドバイス
私は Erlang を初めて使用しますが、私が持っている同時実行の要求により、この技術に適用できると思われるアプリケーションから始めたいと思っています。
この写真は、私がやりたいことを強調しています。
メッセージがキューからプルされ、ユーザーが Django アプリのフォームに何らかの入力を行った結果として以前にセットアップされたワーカー プロセスにルーティングされる場所。セットアップには追加のデータベース (既存のデータベースなので、このビットには ETS/DETS を使用したくない) ルックアップが必要であり、メッセージ ルーターと通信して関連するプロセスを作成します。
私の問題は、将来、セットアップが必要なすべてのワーカーを Django アプリに問い合わせて、最初にタスクを実行することを希望する可能性があることを考えると、ここで通信するための最良の方法は何ですか。私は HTTP/json を好み、Mochiweb と MochiJson で見つけられるものを少し読んだことがあります。OTP スーパーバイザとアプリケーションを用意する予定でしたが、erlang メッセージをルーターに渡す別の mochiweb プロセスを用意するのは賢明でしょうか?
スクリプトを使用してディレクトリ構造を作成する方法について説明しているすべてのチュートリアルが原因で、mochiweb に少し苦労しました。これは、mochiweb 中心のデザインになっているようです。これは望ましくありません。軽量の mochiweb プロセスが必要です。それは時折の仕事をします。
これをバラバラにしてください。すべてのコメントを歓迎します。
乾杯
デイブ
erlang - スーパーバイザによる再起動後、gen_server のデータは保持されますか?
多くのgen_serverを起動するスーパーバイザーがあります。各 gen_server には多くの時間がかかる大量のデータ負荷があります。エラーがいつ発生したかを知りたいのですが、gen_server の状態とそのプロセス dict に保存されているデータは、次回の起動のために保持されるので、再度初期化する必要はありませんか?
erlang - OTP14B02構成エラー
OpenSolarisにOTP14B02をインストールしようとしましたが、呼び出し時に次のエラーが発生します./configure
。
この問題の原因は何で、どうすれば解決できますか?
erlang - erlang/OTPのレート制限イベントハンドラー
潜在的に高いレートでポイントを生成するデータソースがあり、各ポイントで時間のかかる操作を実行したいと思います。ただし、システムが過負荷になったときに、余分なデータポイントを削除することで、システムを適切に劣化させたいと思います。
私の知る限り、gen_eventを使用してもイベントがスキップされることはありません。概念的には、gen_eventで実行したいのは、ハンドラーを再度実行する前に、最新の保留中のイベントを除くすべてを削除することです。
標準のOTPでこれを行う方法はありますか?それとも私がそのように物事を扱うべきではないという正当な理由がありますか?
これまでのところ、私が持っている最善の方法は、gen_serverを使用し、タイムアウトに依存して高価なイベントをトリガーすることです。
このアプローチは正しいですか?(特に監督に関して?)