Я создал общее поведение, которое инкапсулирует функциональность tcp/ip. Все, что должен сделать пользователь поведения, — это реализовать обратные вызовы, которые обрабатывают проанализированные «команды», поступающие от того, что находится на другой стороне сокета.
Мое общее поведение создает процесс прослушивания портов, который прослушивает порт через gen_tcp:accept. Когда кто-то подключается к порту, прослушиватель портов просит супервизора запустить новый прослушиватель портов, в то время как он продолжает обрабатывать связь сокета с любым клиентом, который только что подключился. Поскольку каждый из этих прослушивателей портов/обработчиков сокетов создается динамически и идентичен, для их создания я использую супервизор simple_one_for_one. Стандартные вещи.
Вот мой вопрос. Если процесс прослушивания порта завершается, все поведение становится нефункциональным, поскольку порт не будет прослушиваться. Поскольку прослушиватель портов создается супервизором simple_one_for_one, супервизор не может перезапустить новый прослушиватель портов.
Итак, должен ли я создать процесс keep_alive, который отслеживает «последний» прослушиватель портов и просит superviosr запустить еще один, если он умрет? Или есть какая-то другая передовая практика для этого типа случая.
Кроме того, есть ли способ увидеть/изучить процесс, создаваемый этим поведением? Это не приложение, поэтому appmon здесь не работает.
Спасибо