Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3046064
  • 博文数量: 535
  • 博客积分: 15788
  • 博客等级: 上将
  • 技术积分: 6507
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-07 09:11
文章分类

全部博文(535)

文章存档

2016年(1)

2015年(1)

2014年(10)

2013年(26)

2012年(43)

2011年(86)

2010年(76)

2009年(136)

2008年(97)

2007年(59)

分类: PERL

2012-07-25 10:25:50


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;
}

参考:
 推荐
阅读(4374) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~