我正在阅读Manning出版社的《Erlang & OTP实战》。我认为这是一本非常好的书。它包含一个不错的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
。在 my_server
中以主动方式打开 UDP 连接,以便对每个新的 UDP 消息调用 handle_info/2
,并在响应中调用 my_worker_sup:start_child/2
将消息传递给一个新的工作进程进行处理。(根据书本推荐,最后一次对 start_child/2
的调用实际上被包装在一个 API 函数中,隐藏了一些细节,但基本上就是这样发生的。)我是否正在遭受 OTP 狂热?
my_worker_server
是否真的需要实现 gen_server 行为?我是否需要使用 my_worker_sup
?我这样设置是为了可以通过
start_child/2
调用使用 my_worker_sup
作为一个工厂,但我只使用 worker 的 init/1
和 handle_info(timeout, State)
函数来首先设置状态,然后处理消息,最后关闭 worker。我应该直接生成 worker 吗?或者可能有更适合的行为吗?
谢谢, HC