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

StackOverflow https://stackoverflow.com/questions/1359205

  •  20-09-2019
  •  | 
  •  

Вопрос

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

Теперь я смотрю на MochiWeb и создал образец проекта [HelloWorld], используя скрипт new_mochiweb.erl. Просмотр исходного кода, который я вижу просто стандартные модули Erlang.

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

Это было полезно?

Решение

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top