Chinaunix首页 | 论坛 | 博客
  • 博客访问: 303128
  • 博文数量: 35
  • 博客积分: 836
  • 博客等级: 准尉
  • 技术积分: 678
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-07 20:11
文章分类

全部博文(35)

文章存档

2013年(1)

2012年(24)

2011年(10)

分类: 系统运维

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 #include int main(int argc, char *argv[]) { while(FCGI_Accept() >= 0) { printf("Content-Type: text/plain\n"); printf("Hello world in fastcgi\n"); } return 0; } 2)编译服务代码$gcc main.c –lfcgi 3)启动服务

$ 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还有好多内容没有涉及,意思是这个意思,还带后续完善。

阅读(3373) | 评论(1) | 转发(1) |
0

上一篇:proto buf

下一篇:2012年的第一篇博客

给主人留下些什么吧!~~

wwmshe2012-12-12 11:19:34

8错 8错