5

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

现有代码不使用任何 Apache 特定的东西,只是普通的 Perl 代码,以mod_perl.

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

A. 使用 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. 方法AB是添加 FastCGI 支持的等效方法吗?
  2. 如果AB不同,那么使用其中一个的优缺点是什么?
  3. mod_perl从FastCGI移植时,是否有任何最佳实践或陷阱?

谢谢。

4

2 回答 2

3

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

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

您可能还想通读一个为应用程序实现 FastCGI 接口的库。您可以在fastcgi.com上找到其中的一些。这可能有助于您了解与当前正在执行的操作相比,您的应用程序将以不同方式执行的操作。

祝你好运!

于 2009-03-20T04:34:09.180 回答
2

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

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

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

我没有使用过这两种方法,这就是我从文档中看到的样子,所以我很可能是错的。

于 2009-03-20T05:32:20.100 回答