分类: 系统运维
2011-12-30 00:57:52
昨天在搞nginx的时候发现了有fastcgi这么个东西,那个时候还不太清楚是什么东西。今天上午找了些资料,把这个东西是什么东西算是弄得有点头绪了。
fast cgi是由于传统的cgi效率过差,然后提出的思想。其核心思想就是,原来的cgi服务都需要重新启动进程,服务,然后关闭进程。fastcgi的思想就是设定一个持续进程,作为一个cgi服务器,然后web服务器将相应的cgi请求通过socket传给fastcgi服务端口,再从fastcgi获得相应的结果输出。
fastcgi的思想是这样,今天通过以下几个实验验证了fastcgi的协议。需要以下几个模块:fcgi, spawn-fcgi. 这些模块均可通过各个linux发行版的包管理器获得,也可通过源码自行编译获得。
1. 下载fcgi-2.4.0.tar.gz
$tar zxmf fcgi-2.4.0.tar.gz
$cd fcgi-2.4.0
$./configure --prefix=/home/imay/usr
$make
$make install
这样就在/home/imay/usr下安装了fcgi的一些bin以及相关库信息。
fastcgi的应用程序就是一个while循环在,不停的accept,如果收到相应的服务请求则负责服务并将结果返回。
在fastcgi的进程环境中,标准输入与标准输出已经被重定向到了监听的socket上,所以普通的printf就是将数据输出到请求的web server中。
由于使用fastcgi需要适当的进程环境,这就需要辅助工具来启动fastcgi应用,使用spawn-fcgi即可完成此目的。所以下面介绍spawn-fcgi的安装及使用。
2. 下载spawn-fcgi-1.6.3.tar.gz
$tar zxmf spawn-fcgi-1.6.3.tar.gz
$cd spawn-fcgi-1.6.3
$./configure --prefix=/home/imay/usr
$make
$make install
这样就在/home/imay/usr目录下安装好了spawn-fcgi的二进制。
看了代码发现spawn-fcgi的主要工作就是创建fastcgi所需的进程环境,包括重定向标准输入输出等。在完成这些哦重定向工作后,spawn-fcgi执行exec启动fastcgi。
建立好环境后,具体进行实验验证fastcgi的工作流程。
3.具体实例如下所示
1)书写fastcgi app程序
#include$ spawn-fcgi -a127.0.0.1 -p9111 -f ./a.out
spawn-fcgi: child spawned successfully: PID: 27346
此时fastcgi程序已经启动
$netstat -nlp | grep 9111
tcp 0 0 127.0.0.1:9111 0.0.0.0:* LISTEN 27346/a.out
可以看到正在监听9111端口。
4)向9111端口发送fastcgi请求
$ cgi-fcgi -bind -connect 127.0.0.1:9111
Content-Type: text/plain
Hello world in fastcgi
cgi-fcgi是fastcgi提供的一个工具,用来辅助发送fast cgi请求。
通过上述的结果能够看出,cgi-fcgi通过socket向hello world的fastcgi服务器发送了请求。
然后fastcgi将处理后的结果通过socket传输给cgi-fcgi,然后cgi-fcgi将得到的结果打印到屏幕上。
通过以上实验能够验证fastcgi的工作流程。
今天就写到这吧,fastcgi还有好多内容没有涉及,意思是这个意思,还带后续完善。