我只是在阅读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
但我只使用 workerinit/1
和handle_info(timeout,State)
函数来首先设置状态,然后在关闭 worker 之前处理消息。
我应该直接产生工人吗?也许另一种行为更适合?
谢谢,慧聪