Подтвердить что ты не робот

Когда использовать gen_server в приложениях Erlang/OTP

Прочитав книгу Джо Армстронга и посмотрев скринкасты Кевина Смита, я создал простое приложение OTP, состоящее из одного gen_server и одного супервизора, объединенных вместе как приложение OTP.

Теперь я смотрю на mochiweb и создал образец проекта [helloworld], используя new_mochiweb.erl script. Просмотр исходного кода Я вижу, что он не отличается от моего примера OTP-приложения (там есть приложение OTP, супервизор) с одним ключевым отличием. Сгенерированные файлы helloworld.erl и helloworld_web.erl не реализуют поведение gen_server, они являются стандартными модулями Erlang.

У меня создалось впечатление, что использование gen_server было рекомендуемым способом при создании компонентов приложения OTP. Почему mochiweb может использовать приложения OTP и поведение супервизора, но избегать gen_server?

4b9b3361

Ответ 1

Существует gen_server, называемый mochiweb_socket_server. Сгенерированные модули являются только "модулями обратного вызова" для вызываемого gen_server при получении входящего запроса.

Ответ 2

Вы используете OTP/gen_servers для процессов, которые находятся под стратегией перезапуска - , который является их перезагрузкой, находится под вашим контролем.

Это не относится к процессам, представляющим соединения с веб-браузерами. Если этот процесс замирает, сервер не сможет перезапустить его, поэтому запуск его в OTP бессмыслен.

Mochiweb (и Yaws) используют gen_servers для привязки к порту прослушивания, а затем запускают неконтролируемый процесс для обработки нового соединения.