1、如何改善Perl程序的性能?答案非常简单,那就是不要退出,这一想法的另一个替代语是"持续性",一个持续性的程序在需要时保持运行状态,而不必每次重启。每个对持续性程序的新请求作为一个连续流的一部分来处理,而不是断断续续的。
对于Perl脚本,Perl每次程序运行时都要对源代码进行编译,但是对于Web服务器环境下的Perl应用程序,可以一次编译,多次运行。只要一个程序在用户首次与它交互之前编译,程序就可以享受到一个编译型程序拥有的较长编译时间的好处。花费更多的时间进行编译而不会在运行时影响性能。
2、Web应用程序在模块化程序中一种在web程序中取得持续性的方法是通过编写一个单独的web应用程序部件,然后在运行时把这些部件合并到主进程中。
基于子程序的执行过程
可以通过把单独CGI方式的程序合并到一个更大的Perl程序中,然后这些就可以直接作为插件模块使用。这种转换的关键是Perl程序把另一个Perl程序重新编写作为子程序(sub)并把子程序编译到主程序中的能力。
另外Perl命名空间提供了一种方便的方法来更总已编译到程序环境中的代码。修改后,每个子程序(sub)通常被置入为源程序文件命名的一个包里。这使代码可以通过访问统一命名空间的同一子程序来重用,这也就提供了持续性的全部性能优点,而无需显示地编写直接访问API的代码。
3、安装psgi server
参考:
curl | bash -s psgi /opt/uwsgi
安装完成后在/opt下生成二进制文件
启动:
/opt/uwsgi --socket 127.0.0.1:3031 --psgi /usr/local/nginx/html/myapp.pl --master --uid=99 --threads 12 --
processes 4
其中myapp.pl就是前面提到的整合子程序的大的主程序,内容为:
use CGI::Compile;
use CGI::Emulate::PSGI;
my $sub = CGI::Compile->compile("/usr/local/nginx/html/web.cgi");
my $app = CGI::Emulate::PSGI->handler($sub);
CGI::Compile is an utility to compile CGI scripts into a code reference that can run many times on its own namespace, as long as the script is ready to run on a persistent environment.
use CGI::Emulate::PSGI,This module allows an application designed for the CGI environment to run in a PSGI environment, and thus on any of the backends that PSGI supports.
使用这种方法运行cgi,cgi脚本不需要特别的修改,可以按照正常的cgi脚本来写。
一个简单的web.cgi
#!/usr/bin/perl -w
use strict;
use CGI;
use Data::Dumper;
#creat cgi
my $query = new CGI;
print $query->header('text/html');
print Dumper \%ENV;
4、配置nginx
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:3031;
uwsgi_modifier1 5;
}
参考:
推荐
阅读(4389) | 评论(0) | 转发(0) |