Manning の Erlang & OTP In Actionを読んでいます。とても良い本だと思います。素敵な TCP サーバーの例が含まれていますが、UDP サーバーを書きたいと思います。これが、これまでのアプリの構造です。
my_app % app behaviour
|-- my_sup % root supervisor
|-- my_server.erl % gen_server to open UDP connection and dispatch
|-- my_worker_sup % simple_one_to_one supervisor to start workers
|-- my_worker_server % gen_server worker
したがって、my_app
が開始my_sup
し、 が開始され、 が開始されmy_worker_sup
ますmy_server
。UDP接続はmy_server
アクティブモードで開かれ、handle_info/2
新しいUDPメッセージごとに呼び出され、それに応答してmy_worker_sup:start_child/2
メッセージを処理のために新しいワーカープロセスに渡すように呼び出します。(実際には、最後の呼び出しstart_child/2
は本の推奨に従って、詳細の一部を隠すために API 関数にラップされていますが、これは本質的に何が起こるかです。)
私は OTP 熱に苦しんでいますか? my_worker_server
本当に gen_server の動作を実装する必要がありますか? 私my_worker_sup
はまったく必要ですか?
my_worker_sup
呼び出しを介してファクトリとして使用できるように、このように設定しましたが、最初に状態を設定し、ワーカーをシャットダウンする前にメッセージを処理するためにワーカーの関数と関数start_child/2
のみを使用します。init/1
handle_info(timeout,State)
ワーカーを直接生成する必要がありますか? おそらく、別の行動がより適しているでしょうか?
ありがとう、HC