3

我创建了一个封装 tcp/ip 功能的通用行为。该行为的用户所要做的就是实现处理来自套接字另一侧的任何已解析“命令”的回调。

我的通用行为创建了一个端口侦听器进程,该进程通过 gen_tcp:accept 侦听端口。当有人连接到端口时,端口侦听器要求主管启动一个新的端口侦听器,同时继续处理与刚刚连接的任何客户端的套接字通信。因为这些端口侦听器/套接字处理程序中的每一个都是动态创建且相同的,所以我使用 simple_one_for_one 主管来创建它们。标准的东西。

这是我的问题。如果端口侦听进程终止,则整个行为将不起作用,因为将没有任何东西在侦听端口。因为 port-listener 是由 simple_one_for_one supervisor 创建的,supervisor 不能重新启动一个新的 port_listener。

那么,我是否创建了一个 keep_alive 进程来监视“最新”端口侦听器并要求 superviosr 在它死后启动另一个?或者,对于这种类型的案例是否还有其他一些最佳实践。

此外,有没有办法查看/检查此行为创建的过程?它不是一个应用程序,所以 appmon 在这里不起作用。

谢谢

4

1 回答 1

1

您可能只能继续使用一个侦听器进程,因为您总是能够通过以下方式将套接字所有权传输给另一个进程

gen_tcp:controlling_process(Socket, Pid)

然后你的听众也可以。

然后,您将不会被迫在顶层使用simple_one_for_one主管,而是使用 one_for_one。或者你认为应该更合适的。然后,顶级监督者将使用simple_one_for_one策略生成侦听器进程和接受者监督者。然后,如果由于某种原因(并且如果您愿意)出现故障,那么侦听器肯定会重新启动。

此外,您可以咨询牛仔项目以了解作者使用的方法。

于 2011-11-07T11:06:12.977 回答