选择显示字体大小

windows2000下实现fastcgi(perl版)


   windows2000下实现fastcgi(perl版)

四川 王骜骋 著

什么是cgi
最早的网页都是静态的,好在有了cgi(通用网关接口)的帮助下,网站个个都变的活灵活现,像目前网站上在用的留言本,论坛,聊天室等东西很多都用cgi来完成的。 cgi只是一种接口,并不是一种编程的语言,但是cgi几乎可以接受所有的编程语言去编写它,比如c/c++、vb、shell等等,但是其中最流行的是perl(骆驼) ,perl的文字处理功能非常强大,作者开发它的目的最先也是为了处理文字报表等信息,它是一种解释性的语言,操作平台的可移植性、兼容性也很强,比如windows、*nux、os/2、vms等等 ,使用这种语言编写程序需要在操作系统上安装perl的解释器,要执行脚本的话,perl解释器会被调用,然后一行一行的做解析(关于perl的安装、调试请参考相关网站或书籍,这里不多说)。

什么是fastcgi?
时代在进步,技术在更新!我们的网站越做越大,后台使用的数据库规模也逐渐增加,系统资源和网络开销成为了难题,如果再购买硬件设施(比如专业的应用程序服务器),这会投入一笔不小的资金,但是如果不及时解决,遇到了突法性的网络事件又会经常当机,这会给网站带来巨大的无形损失。perl虽然说是一种方便、快速的东西,但是遇到今天的大型网络,也有点吃不消了,因为cgi的程序每次执行时都要花费时间去复制一个新的进程,这会占用过多的资源。就因为这样一种叫fastcgi的东西横空出世了,fastcgi是一个内存常驻(long-live)型的cgi,它利用内存高速的原理,在编程中进行循环结构把程序寄放在内存
中,只要启动后,它可以一直执行着,从而大量提高程序的运行速度,和cpu、内存的占用时间,这里大家可以想想内存读取和硬盘读取的速度差异所在。这样而来系统就会更快的返回用户的请求,也就是说可以同时拥有更大的并发能力,接受更多的用户。

如何在win2k上进行安装?
以前讨论*nux上安装fastcgi的文章比较多,我这里就不再介绍了。我们今天来看看怎么在win2k上安装它。目前我使用的win2k是server(服务器)版和apache web server。我们采取一种简便的方式在apache上安装fastcgi,这里我们不需要进行编译,直接使用编译好的dll文件,文件下载的地方请看文章尾部(下载一)。 down下来后,把这个文件复制到x:\apache\modules(x:代表你安装apache的盘符),下一步是配置apache的
config文件以加载fastcgi模块,用文本打开x:\apache\conf\httpd.conf,在其中加入以下两行:

loadmodule fastcgi_module modules/mod_fastcgi.dll
addhandler fastcgi-script .fcgi .fpl

以上第一行是说,在apache启动的时候自动载入mod_fastcgi.dll模块,第二行是说fastcgi的文件识别名称, 好让系统知道哪些是fastcgi脚本,应该怎么去打开它(这里我们定义了两个文件后缀fcgi和fpl,当然你也可 以自己增加其他后缀)。就这样最简单的apache fastcgi配置就已经完成了。

完成您的第一个fastcgi程序!
perl写fastcgi是最方便不过了,有的只需要增加(修改)几行代码即可完成。下面我们来完成第一个fastcgi 程序。现在大部分都使用activeperlperl解释器,如果你还没有,请下载一个吧(下载二),fastcgiperl中 的实现我们采用一个名称叫fcgi的软件包(下载三),这个包中提供了一些基本的fastcgi函数,下面来进行安装 这个包,把fcgi.zip解压到任意目录,进入该目录后使用以下命令进行安装:

ppm install fcgi.ppd

如果无以外就说明该软件包已经成功安装在你的系统中,然后该轮到写程序的时候了,我们这里写一个最简单的 计数器程序,程序代码如下:

#!perl

#######################
# fastcgi 计数器演示
# 作者 :王骜骋
#######################

use fcgi; # 使用fcgi模块
my $count = 0; # 初始化变量$count为值0

while (fcgi::accept() >= 0) { # 让程序进入循环状态
# fcgi::accept 是fcgi包中的函数
# 用来接受一个连接,如果连接成功则返回0
print "content-type:text/html\n\n";# 申明内容类型为html
print "你是第";
print $count++;# 输入计数器的值并增加1
print "位访问者";
}

把以上程序拷贝到一个后缀为fcgi或fpl的文件中,然后在浏览器中执行它即可。这时你按刷新就能看到计数器的值在不断的向上增加,通过这个原理,我们可以做出更多更好的程序,下面我们介绍一下留言本的编写技巧和原理。

fastcgi的编程技巧!
以上的程序只是一个简单的计数器,如果真正投放到应用中,我们也不能只写计数器呀。下面我们来谈谈fastcgi编 些留言本的一些使用技巧,编写留言本不像计数器只增加数字就可以了,留言本有很多字段,最简单的也要包含姓名 和内容,这样一来,访问时候就会带有很多参数值,fastcgi在获取这些参数值的时候和一般的perl程序不一样,因 为fastcgi程序一直在内存中工作,如果使用一般的参数读取方法,很容易产生混淆,以导致程序无法正常工作。所以 我们使用另外一个模块cgi中的子集fast(备注:cgi是一个相当出名的模块,其中包含的函数相当丰富,比如上传、获 取表单、浏览器cookie值、server push等等),下面来看看留言本的编写过程:

#!perl

#######################
# fastcgi 留言本演示
# 文件名称:guest.fcgi
# 作者 :王骜骋
#######################

use cgi::fast qw(:standard);# 使用cgi模块的fastcgi子集

my $data_file = "data.txt";# 指定数据库文件名称

while (my $cgi = new cgi::fast) {
print "content-type:text/html\n\n";
my ($rw);# 本地变量申明
$rw = $cgi->param("rw");# 读取表单值,判断是读取还是写入
if ($rw eq "r" $rw eq "") {
print qq~
<form name=&quot;&quot; action=&quot;guest.fcgi&quot; >
<p>姓名:
<input type=&quot;text&quot; name=&quot;name&quot;>
</p>
<p>留言:
<textarea name=&quot;content&quot; wrap=&quot;virtual&quot;></textarea>
</p>
<p>
<input type=&quot;submit&quot; value=&quot;确定&quot;>
<input type=&quot;reset&quot; value=&quot;清除&quot;>
<input type=&quot;hidden&quot; name=&quot;rw&quot; value=&quot;w&quot;>
</p>
</form>
~;
my @line = &read_data;# 获取数据库
foreach (@line) {# 输出留言内容
my (&#36;name,&#36;content) = split(/&&/,&#36;_);
print qq~
姓名:&#36;name
<br>
内容:&#36;content
<hr>
~;
}
} else {
my &#36;name = &#36;cgi->param(&quot;name&quot;);
my &#36;content = &#36;cgi->param(&quot;content&quot;);
local &#36;ok = 1;
if (&#36;name eq &quot;&quot; &#36;content eq &quot;&quot;) {
&print_erro(&quot;请填写完所有的内容!&quot;);
}
if (&#36;ok) {
&write_data(&#36;name,&#36;content);
&print_succ(&quot;留言成功!&quot;);
}
}
}

sub read_data {# 函数功能:读取数据库
open (file,&#36;data_file);
my @line = <file>
close (file);
return @line;
}

sub write_data {# 函数功能:写入数据库
my (&#36;name,&#36;content) = @_;
open (file,&quot;>>&#36;data_file&quot;);
print file &quot;&#36;name&&&#36;content\n&quot;;
close (file);
}

sub print_succ {# 函数功能:输入成功页面
print qq~@_<a href=&quot;java script:history.go(-1);&quot;>点击这里查看</a>~;
}

sub print_erro {# 函数功能:输入错误页面
&#36;ok = 0;
print qq~@_<a href=&quot;java script:history.go(-1);&quot;>点击这里返回</a>~;
}

作者结束语:试用了以上的程序有何感想?是不是速度飞快?该文章是作者使用fastcgi后的一些经验和感想,如果文章中出现语法错误或系统错误,请大家不吝赐教

下载一:http://www.fastcgi.com/dist/mod_fastcgi.dll
下载二:http://www.activestate.com/
下载三:http://www.activestate.com/ppmpacka...s-only/fcgi.zip


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons