简短版:
我应该使用哪些标准来评估可能的Perl“应用服务器”候选项(mod_perl替代品)?
我们正在寻找一种框架,可以允许重复执行各种Perl程序(作为服务),而不会产生以下成本:
每次执行都重新启动perl解释器
每次执行都加载/编译Perl模块
(这两者都是运行mod_perl提供的优点)
注意事项:
我们不太关心mod_perl提供的任何其他好处,比如深度Apache集成。
这将是一个纯粹的应用服务器,意味着不需要任何特定于Web的功能(如果应用服务器提供了它,那么也不会成为问题)。
当然,我们会考虑明显的标准(原始速度,生产就绪稳定性,活跃的开发,能够在我们关心的操作系统上运行)。 我感兴趣的是更少见但微妙的东西,即我们可能希望从这样的框架/服务器中获得什么。
背景:
在公司,决策者们决定要替换当前的情况(使���Embperl开发简单Web应用程序,并通过Apache/mod_perl部署)。
决定使用一个(自制的)MVC系统,该系统将具有Java Spring前端用于View; 而Controller将把后端服务请求解析为执行Model职责的每个应用程序服务(不要太拘泥于细节-这与主要问题不相关)。
后端服务的选项之一是Perl,这样我们就可以利用所有现有的Perl IP(库,Web应用程序后端代码)并向前推进,而无需将其全部移植到Java。
总结一下:
| View | Model/app | Model loaded/executed by: |
================================================================================
OLD | Empberl | Model.pm | mod_perl has Model.pm loaded, called from view.epl |
NEW | Java | Model.pm | perl generic_model.pl -model Model (does "require") |
================================================================================
现在,那些做了一段时间 Perl Web 开发的人,会立即注意到这个新设计最明显的问题:
| Perl interpreter starts | Perl modules are loaded and compiled |
=======================================================================
OLD | Once per mod_perl thread | Once per mod_perl thread
NEW | Once per EVERY! request | Once per EVERY! request |
=======================================================================
换句话说,在新模型中,我们不再享有mod_perl作为持久服务器端应用容器带来的任何性能优势!!!
因此,我们正在寻找可能的应用程序容器来执行同样的功能。
(顺便提一下,是的,我们考虑过直接运行带有mod_perl的Apache实例作为这样一个应用程序容器,作为可行的可能性。但是,由于不需要Web功能,我想看看是否有其他选项可以胜任)。
apache mod_perl
环境(或PSGI)中继续运行服务并从新的Java Swing应用程序中与它们所有进行通信来保持一个启动的“并行性”吗?这样会很慢吗?至少perl
解释器正在运行、等待和准备。 - G. Citomod_perl
应用容器方法吗?看起来www.apache.org使用```Qpsmtpd```以此方式来帮助处理他们的邮件列表传递(即嵌入到apachemod_perl
实例中作为SMTP服务)。所以apache
和mod_perl
...“它们不仅仅是用于Web”的 :-) - G. Cito