Компенсация неспособности супервизора one_for_one перезапустить дочерний элемент: слушатели порта tcp / ip - PullRequest
3 голосов
/ 04 ноября 2011

Я создал общее поведение, которое инкапсулирует функциональность tcp / ip.Все, что пользователь должен сделать, это реализовать обратные вызовы, которые обрабатывают проанализированные «команды», поступающие из того, что находится на другой стороне сокета.

Мой универсальный behvour создает процесс слушателя порта, который прослушиваетпорт через gen_tcp: принять.Когда кто-то подключается к порту, прослушиватель портов просит супервизора ускорить новый прослушиватель портов, пока он продолжает обрабатывать связь через сокет с любым клиентом, который только что подключился.Поскольку каждый из этих обработчиков портов / обработчиков сокетов создается динамически и идентичен, я использую супервизор simple_one_for_one для их создания.Стандартный материал.

Вот мой вопрос.Если процесс прослушивания порта умирает, весь beivour не функционирует, так как порт не будет прослушиваться.Поскольку слушатель порта создается супервизором simple_one_for_one, супервизор не может перезапустить новый port_listener.

Итак, я создаю процесс keep_alive, который отслеживает «последний» прослушиватель порта и просит супервизора запустить еще одинэто должно умереть?Или есть какой-то другой передовой опыт для этого типа случая.

Кроме того, есть ли способ увидеть / изучить процесс, создаваемый этим поведением?Это не приложение, поэтому appmon здесь не работает.

Спасибо

1 Ответ

1 голос
/ 07 ноября 2011

Возможно, вы могли бы продолжить только один процесс слушателя, поскольку вы всегда можете передать владение сокетом другому процессу с помощью

gen_tcp:controlling_process(Socket, Pid)

И тогда ваш слушатель тоже сможет.

Тогда вас не заставят simple_one_for_one руководить на верхнем уровне, но вместо этого one_for_one .Или то, что вы думаете, должно соответствовать лучше.Затем супервайзер верхнего уровня порождает супервизора процесса слушателя и супервизора со стратегией simple_one_for_one .Тогда слушатель, безусловно, будет перезапущен, если что-то выйдет из строя (и если вы захотите).

Далее вы можете обратиться к проекту cowboy , чтобы узнать, какие подходы используют авторы.

...