如何将mod_perl中的Perl代码移植到FastCGI?

时间:2009-03-20 04:07:45

标签: perl fastcgi mod-perl

我们有一个支持mod_perl的现有Perl应用程序。但是,我们的新主机(Dreamhost)不支持mod_perl,只支持FastCGI;因此需要港口。

现有代码不使用任何Apache特定的东西,只是以mod_perl可接受的方式编写的普通Perl代码。

阅读文档和在线教程,似乎添加FastCGI支持涉及将现有代码包装在特定类型的循环中。以下是最常用的骨架代码:

:一种。使用FCGI

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

B中。使用CGI :: Fast

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

子的问题:

  1. 方法 A B 等同于添加FastCGI支持的方法吗?
  2. 如果 A B 不同,那么使用其中一个的利弊是什么呢?
  3. mod_perl移植到FastCGI时,是否有任何应该了解的最佳做法或问题?
  4. 感谢。

2 个答案:

答案 0 :(得分:3)

一般来说,FastCGI应用程序与CGI非常相似。主要区别在于您可以利用您的流程能够持久化的事实。您可以利用它来获得应用程序的速度优势 - 例如,您可以在运行的进程中缓存数据库数据。从本质上讲,您将应用程序更改为自己的应用程序服务器,在Web服务器提供的FastCGI网关后面运行。

我们的想法是弄清楚如何使您的应用程序的处理方式适用于FastCGI网关。您是否使用任何mod-perl特定功能?如果是这样,请远离它。如果没有,那么就开始通过FastCGI进行交谈。您的优势在于Perl可以使用FastCGI接口。我假设您正在使用某种版本控制系统,因此只需创建一个用于移植到FastCGI的分支。然后,开始考虑POST和PUT,从标准输入读取,并将应用程序的响应写入标准输出。

您可能还想阅读为应用程序实现FastCGI接口的库。你可以在fastcgi.com找到一些。这可能有助于您了解您的应用程序与当前正在执行的操作的不同之处。

祝你好运!

答案 1 :(得分:2)

从快速查看CPAN文档,看起来CGI :: Fast是FCGI的包装器; 来自CGI ::快速页面:

  

为了使用CGI :: Fast,您需要FCGI模块

我的看法是它基本上允许你使用CGI.pm的标准功能和FastCGI的速度优势(标题创建和参数访问是你可能已经使用的CGI.pm的主要方面)。

我没有使用其中任何一个,这就是我从文档中看起来的样子,所以我可能错了。