你是从错误的角度看待这个.不要考虑如何部署该程序.而是将程序写入PSGI接口.然后,您将能够在任何环境中部署您的应用程序 - CGI,FastCGI,mod_perl等,而无需进行任何更改.
您可以使用Plack :: Request和Plack :: Response等模块编写"原始"PGSI ,但最好建议使用像Dancer或Catalyst这样的框架.
如果您希望在PSGI环境中运行现有的CGI程序,请参阅Plack :: App :: WrapCGI.
重要的是要理解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模型,以帮助简化采用.
我不确定我是否已经回答了你的问题,但谢谢你的提问.我喜欢写这个答案;-)
| 归档时间: |
|
| 查看次数: |
4404 次 |
| 最近记录: |