2013-12-04 4 views
3

Я программировал на Perl в течение длительного времени, я всегда использовал технологию CGI для создания своих приложений. Теперь я думаю перестроить их и написать новые на FCGI. Пожалуйста, объясните разницу между неподтверждением FastCGI и PSGI с f.e. Звездный человек. Также я прошу объяснить, какие рамки Perl (которые используют FCGI) сегодня «в тренде»? Я понял, что могу заставить скрипты CGI работать как скрипты FCGI, используя CGI :: Fast. Существуют ли другие модули для этого?Perl CGI vs FastCGI

Спасибо!

+0

Catalyst поддерживает FastCGI прозрачно. – ikegami

ответ

6

Вы смотрите на это с неправильной точки зрения. Не думайте о том, как вы собираетесь развертывать программу. Вместо этого напишите свою программу на интерфейс PSGI. Затем вы сможете развернуть свое приложение в любой среде - CGI, FastCGI, mod_perl и т. Д., Не изменяя ничего.

Вы можете написать «сырые» PGSI с использованием модулей, как Plack::Request и Plack::Response, но вы бы лучше посоветовали использовать рамки как Dancer или Catalyst.

Если у вас есть существующие программы CGI, которые вы хотите запустить в среде PSGI, см. Раздел Plack::App::WrapCGI.

+1

Я думаю, что есть немного больше, чтобы рассмотреть. А именно, что запуск в CGI означает перезагрузку вашего приложения для каждого запроса. Если в FastCGI и PSGI ваше приложение запускается только один раз и отвечает на запросы из постоянного состояния. Таким образом, приложение CGI оптимизировано, чтобы избежать ненужного кода, в то время как приложение FCGI или PSGI будет оптимизировано для сохранения и много работы во время запуска. – schultzter

+0

«Если в FastCGI и PSGI ваше приложение запускается только один раз». Конечно, это верно для FastCGI. Но для PSGI это зависит от того, как приложение было развернуто. У меня есть приложения PSGI, которые развернуты в рамках CGI. Это неоптимально, но он работает. Вот в чем смысл PSGI - он работает везде :) –

5

Важно понимать, что CGI является стандартным определением how an information server passes data to a separate program.

The Common Interface Gateway (CGI) является простой интерфейс для запуска внешних программ, программного обеспечения или шлюзов под информационным сервером платформо-независимым способом. В настоящее время поддерживаемые информационные серверы
являются серверами HTTP.

Интерфейс был в использовании в World-Wide Web с 1993 года Эта спецификация определяет интерфейс, известный как (TM) системы AmigaDOS `CGI/1.1' , и его использование
на Unix (R) и ,

В стандартной модели, веб-сервер запускает внешнюю программу каждый раз, когда он нуждается один, маршалы данные в стандартный формат и передает его в программу [или как часть окружающей среды, или через внешний програмы Стандартный вход, в зависимости от метода HTTP (GET, POST и т. Д.). Программа обрабатывает данные, возвращает данные, печатая заголовки и содержимое в стандартный вывод, а затем завершает работу.

Основным недостатком CGI всегда был счет запуска внешней программы при каждом вызове. В Unix для этого требуется, чтобы веб-сервер создавал собственную копию в памяти (fork), а затем внешнюю программу накладывал на копию (exec). Цикл fork/exec является дорогостоящим с точки зрения вычислительной мощности, особенно когда вы говорите о большом процессе Apache (объем памяти с несколькими МБ), наложенный на Perl-интерпретатор, который затем должен анализировать программу Perl до ее запуска.

Чтобы удалить цикл fork/exec из уравнения, было разработано несколько новых вещей. Mod_perl внедряет интерпретатор Perl в процесс apache, удаляя необходимость fork/exec при каждом вызове, а также разрешает кэширование анализируемых perl-программ. Числа, о которых сообщают различные организации, увеличивают пропускную способность в любом месте в 20-100 раз больше, чем CGI.

Второй способ, называемый FastCGI, также был разработан примерно в то же время. В FastCGI запускается внешняя программа (часто контейнер или сервер приложений) одновременно с запуском HTTP-сервера, а HTTP-сервер запрашивает запросы к процессу FastCGI.Эта модель обеспечивает те же преимущества при удалении цикла fork/exec, и имеет набор плюсов/минусов, которые отличаются от mod_perl.

В конце концов, CGI/FastCGI/mod_perl, в зависимости от того, что вы выбрали, ваша программа должна была понять, как получить данные, переданные ей веб-сервером, и это суть проблемы, почти каждый пост-CGI технология определяет его собственный способ передачи данных в/из программы (GI в PSGI по-прежнему stanbds для интерфейса Gateway), но предоставляет адаптер для преобразования его предпочтительного пути в модель CGI, чтобы упростить принятие.

Я не уверен, ответил ли я на ваш вопрос вообще, но спасибо, что попросил его. Мне понравилось писать этот ответ ;-)

Смежные вопросы