mochiweb и gen_server - PullRequest
       36

mochiweb и gen_server

2 голосов
/ 12 июля 2009

[Это будет иметь смысл только в том случае, если вы видели скриншоты Кевина Смита «Erlang in Practice»]

Я - нуль из Erlang, пытаюсь создать простую систему Erlang / OTP со встроенным веб-сервером [mochiweb].

Я прошел через экраны EIP и поиграл с простыми примерами mochiweb, созданными с использованием сценария new_mochiweb.erl.

Я пытаюсь выяснить, как веб-сервер должен относиться к модулям gen_server. В примерах EIP [Ch7] автор создает процесс web_server.erl gen_server и связывает с ним процесс mochiweb_http. Однако в проекте mochiweb процесс mochiweb_http кажется «автономным»; похоже, он не встроен в отдельный процесс gen_server.

Мой вопрос: должен ли один из этих шаблонов быть предпочтительным по сравнению с другим? Если так, то почему? Или это не имеет значения?

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 23 июля 2009

Вы связываете процессы с иерархией супервизора вашего приложения по двум причинам: 1) чтобы иметь возможность перезапустить ваши рабочие процессы в случае их сбоя, и 2) чтобы иметь возможность убить все ваши процессы при остановке приложения.

Как сказано в предыдущем ответе, 1) не относится к процессам обработки http-запросов. Тем не менее, 2) действительно: если вы оставите свои процессы в покое, вы не сможете гарантировать, что все ваши процессы будут очищены от виртуальной машины после остановки приложения (вспомните процессы, застрявшие в бесконечных циклах, ожидающие получения и т. Д.) ).

2 голосов
/ 13 июля 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...