【发布时间】:2012-11-28 01:51:00
【问题描述】:
我只是在阅读 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 中打开,以便在每个新的 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 用作工厂,但我只使用工人的 init/1 和 handle_info(timeout,State) 函数首先设置状态,然后处理关闭工作器之前的消息。
我应该直接生成工人吗?也许另一种行为更适合?
谢谢, 碳氢化合物
【问题讨论】:
-
我想我可能已经找到了如何将工人作为“特殊流程”融入 OTP 的答案erlang.org/doc/design_principles/spec_proc.html#id72749
标签: erlang udp erlang-otp