mod_perl是我要找的吗? FastCGI的? PSGI /普拉克?

时间:2015-06-23 17:16:57

标签: windows apache perl mod-perl

我已经无法在网上为这个找到答案了。我正在尝试在Windows上安装mod_perl,并且有很多死路。

  1. mod_perl甚至是我正在寻找的东西吗?***

    我在公司的本地网络中使用了一组用于数据库和文件系统界面的Web应用程序。 Web服务器使用DBIDBD::mysqlCGI运行Apache 2.2和ActivePerl 5.16。客户端使用CGI参数通过AJAX调用(jQuery.getJSON)将其动态内容提供给Perl脚本。流量非常轻 - 只有4个左右的用户,一次只有几个查询。

    我遇到的问题是延迟对于这些应用的性质是不可接受的。延迟通常约为400毫秒,所有等待时间。我已经尝试了越来越简单的Perl脚本,并相信所有的延迟都是Perl解释器。我已经研究过FastCGI,但据我所知,这主要涉及高流量,这不是我的问题:这是每次低流量呼叫的开销。所以它似乎是一个Apache嵌入式Perl解释器(我理解mod_perl)将解决我的开销相关的延迟问题。

  2. 如何在兰迪科比斯的世界中安装它?

    我为安装程序安装mod_perl所找到的所有资源都涉及一个以前由他运行的服务器theory5x.uwinnipeg.ca,现在在他通过后已经不存在了。 ActivePerl ppm没有内置任何mod_perl软件包,the website显示所有构建失败的列表。

  3. Here是一个ActiveState社区帖子,解释了为什么没有ppm。

    我确实发现this resource似乎有所有缺失的部分,但对于Strawberry Perl。

    所以我认为这样做的唯一方法是从源代码安装,但我不知道如何做到这一点。我对Linux并不熟悉,看起来大部分内容都是针对它的。更糟糕的是我有64位Windows XP和Windows Server来安装它。

    我想到的另一件事是,我可能需要像XAMPP一样安装某种发行版,而不是自己整理所有作品。我现在非常紧张地改变课程并冒着破坏我的工作但速度慢的应用程序的风险

2 个答案:

答案 0 :(得分:4)

  

mod_perl甚至是我正在寻找的吗?

我希望不会。

mod_perl存在问题。您的Apachemod_perlperl都需要使用兼容的编译器和体系结构构建,以便在运行时将它们全部链接起来。当您使用mod_perl时,将不会运行具有64位perl的32位Apache。根据我的经验,mod_perl也应针对Apacheperl特定版本的头文件进行编译。假设您正确地将所有这些秘密酱混合在一起,您现在正在运行一个可以被写得不好的perl脚本崩溃的Web服务器。但从好的方面来看,这个比普通的CGI更有效率。

经过几年的疯狂之后,FastCGI被发明了。通过作为一个持久但独立的进程运行,Web服务器能够实现mod_perl(或mod_PHP,或mod_python)效率而无需需要二进制兼容性或稳定性风险。想想自由吧!一个Apache模块,它只关心与Apache主机的二进制兼容性,并可以将任务分配给Perl,Python,C甚至Visual Basic。 (我只是想尝试使用Forth或Lisp进行Web服务,但那只会很疯狂。)

在Linux发行版(或其他固定的XAMPP堆栈)上运行可以使mod_perl的setup 和维护更容易,因为它们会将它分发到一个已编译的包中,以便与它们提供的包一起使用Apache和& perl的。不幸的是,如果你想运行一个不是你的发行版“官方”的Apache或perl版本,那就准备DIY吧。即使这样,发行版的软件包也无法缓解运行mod_(选择语言)时固有的稳定性问题。

在任何情况下,在您的新配置启动并运行之前,您需要修改现有的CGI脚本。您可以选择将它们重写为mod_perl,FastCGI或PSGI / Plack标准。如果您选择重写PSGI / Plack标准,那么您可以更少关注Web服务器当前或未来配置的细节。

  

如何在兰迪科比斯的世界中安装它?

您问题中的最后一个链接似乎是正确的。您是否有宗教或基于PHB的理由更喜欢ActivePerl而不是StrawberryPerl?最后,mod_perl 需要它是针对Apache的特定版本和perl的特定版本构建的。这将涉及自己编译,其他人包装多个Apache / perl版本组合的版本,或者其他人包装单个版本并要求您使用他们的首选版本的Apache&的Perl。

如果您选择mod_perl路线并且甚至认为服务器软件应该保持最新(XP?严重?),那么请准备好自己动手或信任您的第三方以使您保持最新状态。当然,如果你是一个热门的开发者,那么你可以大大放开你的选择......

<强> TL-DR

FastCGI是你的朋友。特别是如果您正在运行Windows并希望保持服务器软件最新。

mod_perl在负责的发行版或负责任的开发人员的支持下效果最佳,他们可以从源代码中轻松构建它。 ...反复。

答案 1 :(得分:1)

自从我在Windows上安装了mod_perl以来,这是一个永恒的事情,所以我不确定我能帮助你。

但是您对FastCGI“主要处理高流量”的理解并不正确。 FastCGI和mod_perl都将提供非常相似的性能优势,因为它们都将使用持久解释器执行脚本 - 消除了启动perl和在每个请求上编译代码的开销。因此,没有理由不给FastCGI一个机会。

您可能希望查看PSGI / Plack API,它允许您编写可以在vanilla CGI,FastCGI,mod_perl或者支持PSGI的服务器(如Starman或uwsgi)下运行的代码。除了vanilla CGI之外,所有这些都提供了一个持久的环境,可以减少执行脚本的开销。