主题 FastCGI中文参考手册 (Perl语言相关部分)
作者 hoowa .sun
出自 www.perlchina.org
想必所有人都了解CGI技术的通用性与效率有多糟糕。那么本文所描述的所有内容仅限于一种可以大幅度提高页面处理技术的东东,它的名字叫FastCGI,他的速度效率最少要比CGI技术提高5倍以上(要知道目前各种流行的页面处理技术ASP、PHP、JSP/Servlet还没有哪个能超过)。这并不是一种新技术,笔者在2000年第一次用过此技术。大家一定惊讶,既然有这种技术为什么我们还要编写这本参考手册,原因显而易见,虽然此技术已经产生自今,但中文资料还是少的可怜。好!废话到此为之止。
==================
FastCGI的技术原理
==================
如果想了解FastCGI的技术原理就要了解何为"短生存期应用程序",何为"长生存期应用程序"。
先从CGI技术开刀,以下是CGI技术的理论:每次当客户请求一个CGI的时候,Web服务器就请求操作系统生成一个新的CGI进程。当CGI满足要求后,服务器就杀死这个进程。服务器对客户端的每个请求都要重复这样的过程。
而FastCGI技术的理论为:FastCGI程序一旦产生后,他可以持续工作,足够满足客户的请求直到被明确的终止。如果你希望通过协同处理来提高程序的性能,你可以请求Web服务器运行多个FastCGI 应用程序的副本。
CGI就是所谓的短生存期应用程序,FastCGI就是所谓的长生存期应用程序。
由于FastCGI程序并不需要不断的产生新进程,可以大大降低服务器的压力。并且产生较高的应用效率。
自今,较为流行的Java语言Servlet技术在设计上是以参考FastCGI的技术运行所设计。
==============
FastCGI的特点
==============
1. 打破传统页面处理技术
传统的页面处理技术,程序必须与Web服务器或Application服务器处于同一台服务器中。这种历史已经早N年被FastCGI技术所打破,FastCGI技术的应用程序可以被安装在服务器群中的任何一台服务器,而通过TCP/IP协议与Web服务器通讯,这样做既适合开发大型分布式 Web群,也适合高效数据库控制。
2. 明确的请求模式
CGI技术没有一个明确的角色,在FastCGI程序中,程序被赋予明确的角色(响应器角色、认证器角色、过滤器角色)。
3. 合理的程序结构
起初,真的很讨厌FastCGI应用程序的结构要求。没关系,您经过一段时间编写后就会喜欢这种结构,只有这种完全规范的结构才能让您的程序更有效率。
===============================
FastCGI技术支持语言与Web服务器
===============================
在本手册中仅介绍如何用Perl语言来实现FastCGI技术。实际,只要符合FastCGI技术规范,都可以使用本技术。FastCGI技术目前支持语言有:C/C++、Java、Perl、Tcl、Python、SmallTalk、Ruby等。
FastCGI技术需要在Web服务器中安装支持部分才能运行,目前这部分已经完全支持:Apache、IIS、Pi3Web、Zeus等。
1. Apache服务器安装方法
Linux系统Apache:
首先需要准备好一些安装包,如果您已经安装过Apache请参考以下步骤重新编译。
Apache HTTP SERVER
在本文编写的时候,稳定版为apache.1.3.27。我们这里所使用的是源代码版http://apache.linuxforum.net/dist/httpd/apache_1.3.27.tar.gz
其他版或则这个地址有错误请到www.apache.org找相关版本。
Mod_FastCGI
当前是2.3.0版!http://www.fastcgi.com/dist/mod_fastcgi.tar.gz
如果需要下载其他版或地址有错误请到www.fastcgi.com的Servers部分找到相关版本。
好!安装包准备完毕,我们可以开始安装过程了。
1.解压Apache安装包tar zxvf apache_1.3.27.tar.gz
2.解压mod_fastcgi.tar.gz包
3.将解压mod_fastcgi.tar.gz包后的目录复制到apache_1.3.27解压后目录的src/modules下并更名为fastcgi
4.使用Apache安装配置命令./configure --activate-module=src/modules/fastcgi/libfastcgi.a
5.执行make
6.执行make install
7.如过程没出现错误说明安装成功。请测试<Apache安装后目录>/bin/httpd –l
8.如果列表中有mod_fastcgi.c表示成功!
配置Apache的httpd.conf
1.设置FastCGI文件的处理类型,请在httpd.conf包含Addhandler部分添加一句
AddHandler fastcgi-script .fcgi .fpl
这样,Apache就知道.fcgi与.fpl处理为fastcgi文件
2.还要为您的网站设置ScriptAlias解析,这个解析很容易,与普通CGI设置方式相同
ScriptAlias /fcgi-bin/ /usr/local/apache/fcgi-bin/
我这里这样设置后fcgi程序将安装在/usr/local/apache/fcgi-bin/下
测试安装test.fcgi
#!/usr/bin/perl
use FCGI;
my $count =0;
my $request = FCGI::Request();
while($request->Accept() >= 0) {
print “Content-type: text/html\n\n”;
print $count++;
}
Win32系统Apache:
准备安装包
1.下载Apache for win32的版本,我们就下稳定版1.3.27
http://nagoya.apache.org/mirror/httpd/binaries/win32/apache_1.3.27-win32-x86-no_src.msi
2.下载ActivePerl
http:// hoowa .tab.net.cn/soft/ActivePerl-5.8.0.802-MSWin32-x86.msi
配置Apache以支持http服务
1.安装ActivePerl,最好安装到C盘,因为Apache 默认是在C下
2.安装Apache,装好后修改其目录下的conf文件夹下的httpd.conf文件
寻找到ServerName。这里定义你的域名,如果前面有#,记得删除它。
寻找到ServerAdmin。这里输入你的E-Mail地址。如果你仅仅是单机使用,改不改没什么关系
在ServerName下面不远有个Options 和AllowOverride,将他们后面的参数去掉改为All,请注意大小写
配置Apache以支持CGI
1.假设Perl安装在C:\Perl目录,找到ScriptAlias /cgi-bin/ "C:/Apache/cgi-bin”(假设您将apache装在c盘下),那么C:/Apache/cgi-bin就是您存放cgi的目录
2.在ScriptAlias 这句下面,Options 和AllowOverride,将他们后面的参数去掉改为All
3.寻找到AddHandler cgi-script .cgi。删除前面的#,在后面加上 .pl
注意:当您浏览cgi程序出现500错误的时候可以看一下您的程序,是不是以:#!C:\perl\bin\perl开有。
配置Apache以支持Fastcgi
1.下载mod_fastcgi-AP1.dll
http://www.fastcgi.com/dist/mod_fastcgi-AP1.dll
2.将.dll文件复制到../modules下,并修改httpd.conf文件,加入这两句
LoadModule fastcgi_module modules/mod_fastcgi-2.4.0-AP1.dll
AddHandler fastcgi-script .fcgi .fpl
3.保存后就可以运行fcgi程序了.
注意:如果没有安装FCGI package,就在命令提示符下输入
ppm
search FCGI
INSTALL FCGI
2.IIS服务器安装方法 (略)
3.安装FCGI.pm模块
在Linux系统中:
登陆以下地址http://www.cpan.org/modules/by-module/FCGI/
下载最新版的FCGI(在本文编写的时候为)http://www.cpan.org/modules/by-module/FCGI/FCGI-0.67.tar.gz
解压tar zxvf FCGI-0.67.tar.gz
编译perl Makefile.PL
make
make install
完成!
在Windows系统中,以及使用ActivePerl:
进入MS-DOS模式或cmd环境
输入ppm命令
在ppm提示符下输入install FCGI
自动安装…..
完成
===================
FastCGI的程序结构
===================
一个FastCGI的应用程序主要包含两部分:初始化部分、回应循环部分。
#初始化编码
#开始回应循环
#回应内容
#回应结束循环
#!/usr/bin/perl
#以下内容都是初始化部分
use FCGI;
my $count =0;
my $request = FCGI::Request();
#以下内容都是回应部分
while($request->Accept() >= 0) {
print “Content-type: text/html\n\n”;
print $count++;
}
当应用程序被初始化后,初始编码仅仅只运行一次。初始编码就像开启数据库和编译后的应用程序一样常常是十分耗时的操作。
整个回应部分循环始复,直到客户要求终止。回应循环部分从调用FCGI_Accept开始。FCGI_Accept程序执行后会挂启程序(程序循环部分虽在内存中,但是并不运行),除非客户对FastCGI应用程序发出请求。客户的请求一旦到达程序,FCGI_Accept会运行回应部分的内容一次,然后再次中止程序,等待客户下一个请求的到来。整个回应循环部分只会在系统管理员或者Web服务器杀死了FastCGI应用程序后才能消除。
====================
FastCGI应用程序举例
====================
1.一个典型的FastCGI应用程序,这个程序将在初始化部分初始变量$count为0,每次请求运行都将累加一。
#!/usr/bin/perl
use FCGI;
use strict;
my $count = 0;
my $request = FCGI::Request;
while($request->Accept >=0){
$count++;
print “Content-type: text/html\n\n”;
print qq~
<HTML>
<HEAD>
<TITLE>FastCGI</TITLE>
</HEAD>
<BODY>请求已发生次数:$count
</BODY>
</HTML>~;
}
2.FastCGI程序为长生存期应用程序,如在设计中有缺陷会产生内存溢出问题,对服务器造成安全隐患。且这种溢出是不可预见性。本程序初始化了一个控制变量,一旦用户请求次数达到预先设置的数量程序结束,下一次请求将重新初始化。
#!/usr/bin/perl
use FCGI;
use strict;
my $count = 0;
my $request = FCGI::Request;
my $session_life = 1000;
while($request->Accept >=0){
$count++;
print “Content-type: text/html\n\n”;
print qq~
<HTML>
<HEAD>
<TITLE>FastCGI</TITLE>
</HEAD>
<BODY>请求已发生次数:$count
</BODY>
</HTML>~;
if ($count>$session_life) {
end;
}
}
======================
书写FastCGI的规范要求
======================
FastCGI应用程序对编写者提出了一种严格要求的挑战。
1.在程序头必须加载strict模块。格式为use strict;
2.任何变量的使用之前一定不要忘记声明变量my $variable;
3.不要将一些初始化的内容放在回应部分,这样不仅无法提高效率还会降低效率。例如对数据库的连接部分。
4.同样,也不要把什么东西都放在初始化部分。
5.在程序调试后发现有BUG或修改,请先直接修改程序。然后杀死系统中的程序进程,要不你的修改永远不被执行。如果杀不好,就重启Apache吧。
==================
FCGI.pm模块的使用
==================
模块名称:Fast CGI Module
使用格式:
use FCGI;
$request = FCGI::Request();
while($request->Accept() >=0) {
#CGI Process..
}
FCGI支持的使用方法:
FCGI::Request
$request = FCGI::Request(
$input_fh,
$output_fh,
$error_fh,
fileno($socket),
);
$input_fh,$output_fh,$error_fh是设置input/output/error的句柄,默认情况下分别是STDIN、STDOUT、STDERR
$socket的用处在分离FastCGI应用程序与Web服务器的情况下才需要使用。它允许程序通过设置的套接字与Web服务器通讯。
FCGI::OpenSocket(path, backlog)
在程序中创建一个套接字,在建立独立的FastCGI应用程序中用到。
FCGI::CloseSocket(socket)
关闭打开的FCGI::OpenSocket。
$request->Accept
当有新的请求产生,以上句子返回0,其他情况下返回-1。
$request->Attach
重新设置文件句柄连接到相关服务器上。
$request->Detach
临时分离文件句柄。
$request->Finish
结束当前请求,这本来由Accept来自动完成,但有写程序中在返回给客户请求后可能需要做一些其他工作,比如操作数据库。
$request->Flush
清洗当前连接中的所有输入输出。
$env = $req->GetEnvironment()
返回来环境变量。
($in, $out, $err) = $req->GetHandles()
返回标准文件句柄。
$isfcgi = $req->IsFastCGI()
返回当前程序运行的状态是否FastCGI。
========================
FastCGI的效率与应用范围
========================
效率这个词不仅仅一词出现过。我也不仅一次讲解过效率的由来。
现在所有的解释性语言(Perl、Java、Python)的运行效率,都要比编译形语言(ANSI C)慢的多(一到几十倍)。但奇怪的是,大家似乎看到的是Jsp/Servlet不错的效率。这是因为在网络世界中,对效率的影响不在语言的本身,而在以下几个方面:1、技术模型 2、系统I/O带宽 3、程序设计。
FastCGI是一种半成熟(这样说是因为C语言成熟用了十多年,自今Java语言与C++语言都是不断在完善中)的技术,它经过多年的应用实践已经获得广泛的支持。
FastCGI技术适合各种程序设计上的要求,我们建议使用在以下要求中:
1.想使用J2EE以外的一种高效率OpenSource技术。
2.分布式数据库控制系统
3.高访问量页面访问系统
4.性能评测
5.混毕业设计
==============
FastCGI的资源
==============
FastCGI技术官方网站:http://www.fastcgi.com
FastCGI中文讨论组:http://www.ilcatperl.org
中国Perl组织:http://www.perlchina.org
FastCGI技术案例:
http://www.hotmail.com
http://www.yahoo.com
http://www.donews.com
======
声明
======
本文作者: hoowa .sun
感谢:royce(部分内容是他编写的)、bloves(找到很多Bug)
获得方法:http://www.ilcatperl.org
任何网站(非赢利性)转载无需经过作者同意,请保留任何版权声明。
未经作者同意禁止任何杂志转载。
=========================
文章类型:转载 提交:Aoming 核查:NetDemon
分享到:
相关推荐
《FastCGI中文参考手册》是一本专注于FastCGI技术的详细教程,旨在帮助开发者深入理解和有效运用这一高效、稳定的Web服务器接口技术。FastCGI是用于提高动态内容生成速度的一种协议,它允许Web服务器与长期运行的...
**FastCGI 中文参考手册概述** FastCGI 是一种用于 Web 服务器和应用程序之间通信的协议,它旨在提高网站性能,特别是在处理动态内容时。FastCGI 的设计目标是克服 CGI(Common Gateway Interface)的性能瓶颈,...
### FastCGI中文参考手册知识点总结 #### 快速概览 FastCGI是一种用于提高Web应用程序性能的技术,尤其在处理动态内容时表现卓越。它通过优化进程管理机制,显著提升了处理请求的速度,并且能够更好地利用系统资源...
《FastCGI中文手册》是IT领域中关于Web服务器与应用程序接口的重要参考资料,它详细介绍了FastCGI协议的原理、实现以及应用。FastCGI是一种用于提高动态内容生成速度的技术,它通过持久连接来减少每次请求时的启动和...
3. **FastCGI中文参考手册.doc**:提供了官方或社区编写的中文文档,包括API接口、错误代码和配置选项。 4. **深入研究FastCGI 第一步.doc**:可能是一篇逐步教程,引导读者深入理解FastCGI的内部机制和高级特性。 5...
【FastCGI中文手册】是一本专注于FastCGI技术的参考文档,主要针对Perl语言进行讲解。FastCGI作为一种高效的技术,比传统的CGI技术在处理页面时的效率至少提升了5倍,它并非新技术,但在中文资料方面相对匮乏。手册...
Apache HTTP服务器2.0中文参考手册是一份详细的技术文档,旨在帮助用户理解并有效地管理和配置Apache HTTP Server 2.0版本。Apache HTTP Server是全球最广泛使用的开源Web服务器,以其稳定性、灵活性和强大的功能而...
《PHP4中文参考手册》是学习PHP编程语言的重要参考资料,尤其对于初学者和有经验的开发者来说,都是一本极具价值的工具书。这本手册详细介绍了PHP4版本的语法、函数、对象模型以及错误处理等多个方面,帮助读者深入...
这份"Apache中文参考手册(更新2009)"是针对中文用户特别准备的,它为学习和理解Apache服务器的配置、管理和优化提供了详尽的指导。手册的重要性在于它能够帮助初学者快速上手,并为经验丰富的开发者提供必要的参考...
Apache2.2中文版参考手册是一份详尽的文档,旨在帮助用户理解和配置Apache ...通过学习这份中文版参考手册,无论是初学者还是经验丰富的管理员,都能从中获得对Apache2.2的全面认识,并提升自己的服务器管理技能。
《PHP官方中文手册》是PHP开发者的重要参考资料,它包含了丰富的教程和函数使用指南,无论是初学者还是经验丰富的程序员,都能从中受益匪浅。手册详细解释了PHP语言的基础知识、语法特性以及各种内置函数的用法,是...
### Nginx模块参考手册知识点概述 #### 一、Nginx简介 Nginx是一款由俄罗斯专家开发的高效Web服务器软件。它以其出色的性能、稳定性以及灵活性在互联网行业中占据了重要地位。Nginx不仅可以用作传统的Web服务器,...
### Nginx模块参考手册中文版 #### 编译Nginx(CompilingNginx) 在编译Nginx时,需要指定一系列配置选项来启用或禁用特定功能及模块。这些配置选项通过`./configure`命令进行设置。下面是一个示例配置命令: ```...
php官方中文帮助手册,2013最新版 ■版权信息 ■PHP 手册■序言 ■入门指引■简介 ■简明教程 ■安装与配置■安装前需要考虑的事项 ■Unix 系统下的安装 ■Mac OS X 系统下的安装 ■Windows 系统下的安装 ■...
"apache中文手册"对于管理员和开发者来说是一份宝贵的参考资料,它将帮助他们更好地理解和利用Apache服务器的功能,提升其网站和应用的性能和安全性。无论你是初学者还是经验丰富的专业人士,这份手册都将是你日常...