Perl CGI与FastCGI

tes*_*er3 3 perl cgi fastcgi psgi

我已经在Perl上编程了很长时间,我一直使用CGI技术来构建我的应用程序.现在我想重建它们并在FCGI上写新的.请解释使用fe Starman取消使用FastCGI和PSGI之间的区别.另外我要解释一下Perl框架(使用FCGI)今天是什么"趋势"?我知道我可以使用CGI :: Fast强制我的CGI脚本作为FCGI脚本工作.有没有其他模块可以做到这一点?

谢谢!

Dav*_*oss 6

你是从错误的角度看待这个.不要考虑如何部署该程序.而是将程序写入PSGI接口.然后,您将能够在任何环境中部署您的应用程序 - CGI,FastCGI,mod_perl等,而无需进行任何更改.

您可以使用Plack :: RequestPlack :: Response等模块编写"原始"PGSI ,但最好建议使用像DancerCatalyst这样的框架.

如果您希望在PSGI环境中运行现有的CGI程序,请参阅Plack :: App :: WrapCGI.


Len*_*ffe 6

重要的是要理解CGI是信息服务器如何将数据传递到单独程序的标准定义.

通用网关接口(CGI)是一个简单的接口,用于以独立于平台的方式在信息服务器下运行外部程序,软件或网关.目前,支持的
信息服务器是HTTP服务器.

该接口自1993年以来一直被万维网使用.该规范定义了称为"CGI/1.1"的接口,以及它
在Unix(R)和AmigaDOS(tm)系统上的使用.

在标准模型中,Web服务器在每次需要时启动外部程序,将数据编组为标准格式并将其传递给程序[作为环境的一部分,或通过外部程序的标准输入,取决于使用HTTP方法(GET,POST等).程序处理数据,通过将标题和内容打印到标准输出来返回数据,然后退出.

CGI的主要缺点一直是在每次调用时启动外部程序的费用.在Unix上,这需要Web服务器在内存(fork)中创建自身的副本,然后将外部程序覆盖在副本(exec)上.fork/exec循环在计算上很昂贵,特别是在你谈论用Perl解释器覆盖的大型Apache进程(多MB内存占用)时,然后需要解析Perl程序才能运行它.

为了从等式中去除fork/exec循环,开发了一些新的东西.Mod_perl将Perl解释器嵌入到apache进程中,不需要在每次调用时使用fork/exec,也允许缓存已解析的perl程序.各组织报告的数字表明,吞吐量的增加比CGI高出20到100倍.

另一种称为FastCGI的方法也是在同一时间开发的.在FastCGI中,外部程序(通常是容器或应用程序服务器)在启动http服务器的同时启动,http服务器代理对FastCGI进程的请求.这个模型提供了删除fork/exec循环的相同好处,并且具有一组与mod_perl不同的优缺点.

最后,CGI/FastCGI/mod_perl,无论你选择哪个,你的程序都必须了解如何获取Web服务器传递给它的数据,这就是问题的关键,几乎所有后CGI技术都定义了它自己的将数据传入/传出程序的方式(PSGI中的GI仍然是网关接口的标准),但提供了一个适配器,将其首选方式转换为CGI模型,以帮助简化采用.

我不确定我是否已经回答了你的问题,但谢谢你的提问.我喜欢写这个答案;-)