Как я могу перенести код Perl из mod_perl в FastCGI?

У нас есть существующее приложение Perl, которое поддерживает mod_perl, Однако наш новый хост (Dreamhost) не поддерживает mod_perl, только FastCGI; таким образом, требуя порт.

Существующий код не использует никаких специфических вещей для Apache и представляет собой обычный код на Perl, написанный так, что mod_perl,

Читая документацию и интерактивные учебные пособия, выясняется, что добавление поддержки FastCGI включает в себя оборачивание существующего кода внутри определенного вида цикла. Ниже приведен наиболее распространенный код скелета:

А. Использование FCGI

use FCGI;
while (FCGI::accept >= 0)
{
    #Run existing code.
}

Б. Использование CGI::Fast

use CGI::Fast
while (my $cgi = CGI::Fast->new()) 
{  
   #Run existing code.
}

Подразделы: Вопросы

  1. Являются ли методы A и B эквивалентными способами добавления поддержки FastCGI?
  2. Если А и В разные, каковы плюсы и минусы использования одного над другим?
  3. Существуют ли какие-либо передовые практики или ошибки, о которых следует знать при переносе с mod_perl в FastCGI?

Благодарю.

2 ответа

Решение

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

Идея состоит в том, чтобы выяснить, как сделать средства обработки вашего приложения применимыми к шлюзу FastCGI. Используете ли вы какой-либо мод-специфичный функционал? Если так, отойди от этого. Если нет, то просто начните работать через FastCGI. У вас есть преимущество в том, что для Perl доступны интерфейсы FastCGI. Я предполагаю, что вы используете какую-то систему контроля версий, поэтому просто создайте ветку, которая предназначена для портирования на FastCGI. Затем просто начните думать о POST и PUT как о чтении из стандартного ввода, а ответы вашего приложения - как о записи в стандартный вывод.

Вы также можете просто прочитать библиотеку, которая реализует интерфейс FastCGI для приложения. Вы можете найти некоторые из них на http://www.fastcgi.com/. Это может помочь вам понять, что ваше приложение будет делать по-другому по сравнению с тем, что оно делает в настоящее время.

Удачи!

Если посмотреть на документы CPAN быстро, то получается, что CGI:: Fast - это оболочка для FCGI; из CGI:: Быстрая страница:

Для использования CGI:: Fast вам понадобится модуль FCGI

Я предполагаю, что он в основном позволяет вам использовать стандартную функциональность CGI.pm с быстрыми преимуществами FastCGI (создание заголовка и доступ к параметрам являются основными аспектами CGI.pm, которые вы, вероятно, уже используете).

Я не использовал ни один из них, это то, что мне кажется из документации, так что я могу ошибаться.

Другие вопросы по тегам