Fastcgi 白皮书

Fastcgi白皮书

官网版:http://www.fastcgi.com/drupal/node/6?q=node/22#S4

中文版:http://fuzhong1983.blog.163.com/blog/static/1684705201051002951763/

我读的是官网版,老实说,和中文的理解难度差不多,建议读官网版。


概述:

传统的CGI技术是一个request启动一个进程来处理,处理结束后该进程就退出了。Fastcgi采用的技术则是web server启动一个进程处理多个request。而Fastcgi(协议)就是web server和request处理进程之间的协议。


Fastcgi内容简介:

1.实体定义

Fastcgi协议涉及两种类型实体,Fastcgi Server和Fastcgi Application。

Fastcgi Server角色定义:

Application进程管理:启动,删除,数量控制

消息中专:1)从宿主Web Server获取http request处理后分记录通过connection(socket/pipeline/)发送到Application;2)接收Application发回的消息并转发到Web Sever(另有stderr消息,记录到日志)

协议状态控制:1)向Application发送消息使其Abort对一个request的处理;2)连接控制:管理(建立/删除/保持)与Applicatin之间的连接。

Fastcgi Applicatin角色定义:

request处理:接收Fastcgi Server发送过来的消息,并response。

连接管理:Fastcgi server可以将连接管理托管给Application管理。


Fastcgi Application分三种类型:

1)Responser:专门处理http request。

2)Authorizer:访问控制,校验来自http client的用户名/密码组。校验通过后通知Fastcgi Server,它将在后续的http request中附上Authorizer指定的内容。

3)Fileter:和Responser类似,但是区别比较模块,还没有实际使用过,不知其妙!


2.协议的消息:

typedef struct {
            unsigned char version;//协议版本
            unsigned char type;//消息类型:1)协议管理类消息;2)业务消息
            unsigned char requestIdB1;//每个消息属于编号唯一的request,使得Application可以区分并同时处理多个request,也使得消息可以乱续发送
            unsigned char requestIdB0;
            unsigned char contentLengthB1;//数据长度
            unsigned char contentLengthB0;
            unsigned char paddingLength;//padding长度,padding是为了使消息8字节对齐
            unsigned char reserved;//此字段使得消息头(此前7字节)8字节对齐
            unsigned char contentData[contentLength];//数据,不同消息类型有不同的格式
            unsigned char paddingData[paddingLength];//padding
        } FCGI_Record;


另:

Fastcgi在实现上通过从定义标准输入输出错误流来兼容传统CGI程序。

STDERR将被WEB Server记录到日志。


总结:

有点:Applicaton可以长期运行,减少启动删除进程带来的资源损耗。协议基于TCP/IP 也使得部署更加方便。

缺点:相对当前流行的web框架(eg struts2)来说,功能简陋,难以直接作为开发框架。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值