У супервизора какая стратегия работы с клиентами. Хорошо пусть one to one. Какой смысл крутить соединение под супервизором если у tcp-клиента есть возможность тупо закрыть сокет самостоятельно. И еще супервизор помнит переменную client, захватывает ее?
Вот тут написано что делает start_child и зачем он может быть нужен: https://hexdocs.pm/elixir/Task.Supervisor.html#start_child/3
TCP клиент может закрыть сокет, но нам же нужно как-то управлять процессом, который владеет сокетом spawn не подходит, потому что процесс не умрёт по-нормальному, когда будет завершаться система spawn_link не подходит, потому что упавший сокет роняет tcp listener Поэтому тут используется Task.Supervisor
В принципе согласен. Если стратегия :permanent т.е. процесс всегда перезапускается, то если клиент закрыл сокет, то супервизор после нескольких неудачных попыток перестанет это делать.
У Task.Supervisor процесс не перезапускается
start_child(supervisor, fun, options \\ []) в данном случае да - по умолчанию не пере запускается, но существуют разные стратегии, которые можно задать через options
Обсуждают сегодня