2016-05-12 74 views
0

我有一个需要每个(TCP)连接的主管结构。现在看来,每个主管都需要它自己的唯一名称,而这个名称又需要是一个原子(至少这是我从错误消息中收集的)。唯一主管/服务器名称

解决方法是每次生成一个新原子,类似于a suggestion from the erlang-questions list

现在我了解到原子永远不会被清理干净,所以有可能被太多的连接拒绝,耗尽原子空间。这是如何正确完成的?

回答

4

这里涉及两种类型的名称,过程的注册名称和主管儿童的标识符。

没有必要为每个主管进程注册名称。有两个启动监督程序的功能,supervisor:start_link/2 and supervisor:start_link/3start_link/3启动主管并在给定名称下进行注册,而start_link/2启动主管时未注册名称。 (如果该过程没有注册名称,则唯一参考它的方法是通过其pid。)

至于主管儿童的标识符,如果您有主管将拥有无限数量的子流程(无论这些子进程是否为工人或主管),通常使用特殊重启类型simple_one_for_one。这意味着,监督者不必保留静态子规范列表(从init回调函数返回或添加了supervisor:start_child函数),而是具有单个“模板”子规范,而supervisor:start_child函数基于该模板。