私はまだ erlang/otp の世界に慣れていないので、これはかなり基本的な質問だと思います。それにもかかわらず、次の正しい方法を知りたいです。
現在、トップスーパーバイザーに応募しています。後者は、gen_tcp:accept を呼び出して (スリープ状態で) ワーカーを監視し、受け入れられた接続ごとにプロセスを生成します。注: この質問には、listen() がどこで行われるかは関係ありません。
私の質問は、これらのワーカー (gen_tcp:accept でスリープするワーカー) がシステム メッセージ (シャットダウン、トレースなどを処理する) を処理できるように、otp 設計原則を尊重する正しい方法についてです。私はここで読んだ:http://www.erlang.org/doc/design_principles/spec_proc.html
そう、
- これに gen_fsm や gen_server などの利用可能な動作の 1 つを使用することは可能ですか? 私の推測では、gen_tcp:accept/1 への呼び出しがブロックされているため、いいえです。受け入れタイムアウトを指定することでそれを行うことはまだ可能ですか? もしそうなら、accept() 呼び出しをどこに置くべきですか?
- または、上記のリンクの例のように、ゼロからコーディングする必要がありますか (つまり、既存の動作を使用しないでください)。この場合、gen_tcp:accept/1 の代わりに gen_tcp:accept/2 を呼び出す (つまり、タイムアウトを指定する) メイン ループを考え、その直後に受信ブロックをコーディングして、システム メッセージを処理できるようにします。これは正しいですか、受け入れられますか?
前もって感謝します :)