【问题标题】:How can I port Perl code from mod_perl to FastCGI?如何将 Perl 代码从 mod_perl 移植到 FastCGI?
【发布时间】:2009-03-20 04:07:45
【问题描述】:

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

现有代码不使用任何 Apache 特定的东西,只是以mod_perl 可接受的方式编写的普通 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 时,是否有任何最佳实践或注意事项?

谢谢。

【问题讨论】:

    标签: perl fastcgi mod-perl


    【解决方案1】:

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

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

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

    祝你好运!

    【讨论】:

      【解决方案2】:

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

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

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

      这两个我都没用过,这就是我从文档中看到的样子,所以我很可能是错的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-24
        • 2015-06-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多