我有一个需要每个(TCP)连接的主管结构。现在看来,每个主管都需要它自己的唯一名称,而这个名称又需要是一个原子(至少这是我从错误消息中收集的)。唯一主管/服务器名称
解决方法是每次生成一个新原子,类似于a suggestion from the erlang-questions list。
现在我了解到原子永远不会被清理干净,所以有可能被太多的连接拒绝,耗尽原子空间。这是如何正确完成的?
我有一个需要每个(TCP)连接的主管结构。现在看来,每个主管都需要它自己的唯一名称,而这个名称又需要是一个原子(至少这是我从错误消息中收集的)。唯一主管/服务器名称
解决方法是每次生成一个新原子,类似于a suggestion from the erlang-questions list。
现在我了解到原子永远不会被清理干净,所以有可能被太多的连接拒绝,耗尽原子空间。这是如何正确完成的?
这里涉及两种类型的名称,过程的注册名称和主管儿童的标识符。
没有必要为每个主管进程注册名称。有两个启动监督程序的功能,supervisor:start_link/2
and supervisor:start_link/3
。 start_link/3
启动主管并在给定名称下进行注册,而start_link/2
启动主管时未注册名称。 (如果该过程没有注册名称,则唯一参考它的方法是通过其pid。)
至于主管儿童的标识符,如果您有主管将拥有无限数量的子流程(无论这些子进程是否为工人或主管),通常使用特殊重启类型simple_one_for_one
。这意味着,监督者不必保留静态子规范列表(从init
回调函数返回或添加了supervisor:start_child
函数),而是具有单个“模板”子规范,而supervisor:start_child
函数基于该模板。