Изменения

Платформы для запуска Perl веб-приложений

802 байта добавлено, 09:48, 7 августа 2009
SCGI
# Слабые возможности взаимодействия с HTTP-сервером — например, обычно в CGI даже не передаются все заголовки запроса. Кроме того, вывод ответа на STDOUT неудобен, если различные параметры задаются в различных местах программы.
=== FastCGI / SCGI ===
Идея FastCGI — [[rupedia:FastCGI|FastCGI]] — ликвидировать недостатки CGI, сохранив интерфейс. Главный недостаток CGI — необходимость перезапуска приложения, поэтому его и ликвидировали в первую очередь: FastCGI-процесс обрабатывает не один запрос, а много — последовательно принимая их в цикле через Unix- или TCP-сокет. Таким образом, FastCGI-процессы, во-первых, могут быть запущены на другом физическом сервере, а во-вторых, становится возможно распределение запросов между несколькими процессами. [[rupedia:SCGI|SCGI]] — практически это клон FastCGI, отличия лишь в формате передачи данных, который, как утверждают авторы, проще реализовать, но и возможностей у него меньше — например, STDERR не передаётся обратно HTTP-серверу. Поддерживается несколько менее широко: [http://wiki.nginx.org/NginxNgxSCGIModule ngx_scgi_module], Apache, [http://redmine.lighttpd.net/wiki/lighttpd/Docs:ModSCGI Lighttpd], [http://www.cherokee-project.com/ Cherokee], Mathopd с неофициальным [http://www.mail-archive.com/mathopd@mathopd.org/msg00369.html патчем].
Плюсы:
Минусы:
# Склонность к утечкам памяти, особенно в случае использования большого числа устаревшего кода, рассчитанного на CGI и «умирание» скрипта после обработки каждого запросав среде CGI.
# Взаимодействие по-прежнему ведётся через функции CGI, поэтому «интерфейсные» минусы CGI никуда не исчезают. Специальных библиотек для упрощения работы с протоколом FastCGI нет. ''Идеология, видимо, такова — а зачем, раз и так есть CGI.pm и компания?''
Минусы:
* Идея несколько лишает nginx легковесности. Появляются некоторые проблемы с масштабируемостью в случае простоев (ожиданий ответов от СУБД и ти т.п п.).
* Жёсткая завязка на использование внутри nginx. Больше нигде приложения, написанные под nginx, не заработают.