2013-12-12 6 views
3

У меня есть такой вопрос - что такое правильный путь к вилке в приложении PSGI/Plack?Правильный путь к вилке в приложении PSGI/Plac (Perl)

С одной стороны, я знаю, что приложение PSGI является «backend-agnostic», поэтому его можно запустить с использованием разных методов - FastCGI, CGI и т. Д. Но, с другой стороны, я знаю, что, например, в приложении FastCGI нам нужно сделать некоторые манипуляции с FCGI :: Request объектом до/после fork.

Итак, что я должен делать?

  1. Только вилка :)
  2. делать какие-то магические манипуляции и вилки (что манипуляции?)
  3. архитектуры приложения Rewrite => переместить все тяжелые операции во внешний процесс-демон.

ответ

1

Поскольку PSGI - это спецификация, вы можете использовать его во всех этих ситуациях. Если вы можете запустить приложение PSGI в mod_perl, с сервером FastCGIs, как CGI, или вы можете запускать собственные родственные серверы PSGI, такие как plack и т. Д.

Как вы их начинаете, очевидно, зависит от того, какой из них вы выберете. Mod_perl живет и умирает по своему процессу apache, скрипты CGI не должны запускаться извне. Но FastCGI и автономные серверы PSGI, такие как Starman, как правило, обрабатываются обратным прокси-сервером или запускаются и останавливаются вручную. Оставляя это до прокси-сервера, а конфигурация сервера PSGI проще всего, хотя иногда вы захотите управлять внешними процессами независимо от прокси-сервера.

+0

О, я понимаю, что, но я просил что-то еще Да, мы можем запустить приложение PSGI, используя различные движки, используя различные обработчики прогонов - FCGI, CGI, встроенные серверы PSGI как Starman и т.д. и т.п. Но как я могу раскошелиться в моем app - когда я не знаю, в каком окружении мое приложение запустилось, но для этой _current_ среды может потребоваться некоторая специальная инициализация для правильного форкирования? –

+0

«Викинг» ваше приложение обрабатывается контейнером. Для всех целей процесс FCGI - это ваше приложение, сервис Starman - это ваше приложение. Они действуют как контейнеры вашего кода и как интерфейс между прокси и вашим кодом. Например, если вы выберете Apache/FastCGI, вы сообщите apache, сколько процессов fastcgi для fork и какие URI передаются серверам fastcgi. Вы не вручную разблокируете свое приложение. –

+0

Вы совершенно правы, но я спрашиваю о чем-то другом :) Возможно, виноват мой плохой английский) Я спрашивал о «ручной» вилке в своем приложении. Например -> app recv some request и должен выполнить некоторую тяжеловесную операцию, которая может занять много времени. Итак, я создаю дочерний процесс с помощью вызова fork() и запускаю эту операцию в дочернем процессе. Вопросы о IPC, о том, как пользователь получает результат, когда это делается, и т. Д. - пусть остается за сценой. Основная проблема заключается в вызове fork(). –