下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、fastcgi学习总结作者: jimmy cao,2008/9 all rights reserved 共同学习进步,转载请注明什么是fastcgifastcgi :fast common gateway interface(快速通用网关接口),它是cgi的增强版。fastcgi是一个快速、开放和安全的web server接口,解决了传统cgi的性能问题,却又没有带来编程的复杂性。老的cgi程序可以很轻易的移植成fastcgi程序。fastcgi的技术原理如果想了解fastcgi的技术原理就要了解何为短生存期应用程序,何为长生存期应用程序。 先从cgi技术开刀,以下是cgi技术的理论:每次当客
2、户请求一个cgi的时候,web服务器就请求操作系统生成一个新的cgi进程。当cgi满足要求后,服务器就杀死这个进程。服务器对客户端的每个请求都要重复这样的过程。而fastcgi技术的理论为:fastcgi程序一旦产生后,他可以持续工作,足够满足客户的请求直到被明确的终止。如果你希望通过协同处理来提高程序的性能,你可以请求web服务器运行多个fastcgi 应用程序的副本。 cgi就是所谓的短生存期应用程序,fastcgi就是所谓的长生存期应用程序。由于fastcgi程序并不需要不断的产生新进程,可以大大降低服务器的压力。并且产生较高的应用效率。 fastcgi的特点1. 打破传统页面处理技术
3、传统的页面处理技术,程序必须与web服务器或application服务器处于同一台服务器中。这种历史已经早n年被fastcgi技术所打破,fastcgi技术的应用程序可以被安装在服务器群中的任何一台服务器,而通过tcp/ip协议与web服务器通讯,这样做既适合开发大型分布式web群,也适合高效数据库控制。 2. 明确的请求模式 cgi技术没有一个明确的角色,在fastcgi程序中,程序被赋予明确的角色(响应器角色(responder)、认证器角色(authorizer)、过滤器角色(filter)。3. 独立性 架构独立性:fastcgi接口并不绑定特定的应用服务器架构,应用既可以是单线程的也
4、可是多线程的。进程独立性:fastcgi进程是独立于服务器的进程,对fastcgi进程的调试不影响服务器。同理,fastcgi进程的崩溃也不至于服务器崩溃。语言独立性:fastcgi技术目前支持语言有:c/c+、java、perl、tcl、python、smalltalk、ruby等。如何开发fastcgi程序实现细节先来看看传统cgi是怎么做的,如下图:图一:cgi的数据流cgi应用是通过标准的posix流(stdin, stdout, stderr和环境变量)加上环境变量,来与http服务器进行通信。与cgi类似,fastcgi采用的方法是:在http进程和fastcgi进程之间创建一个全
5、双工的连接,数据报通过fastcgi协议封装在两个进程之间传递。stdin和环境变量被封装在连接的输入部分;stdout和stderr被封装在连接的输出部分。因此,作为输入端,fastcgi程序从连接上接收数据,解包,分离出stdin和环境变量,然后调用应用处理逻辑。作为输出端,fastcgi用fastcgi协议打包stdout和stderr,发送给http服务器处理。由于fastcgi应用不要求和http服务器运行在同一个节点上,因此,fastcgi支持两种形式的连接:1)流管道,用于在同一个节点上的通信;2)tcp流,用于不同节点上的通信。下图是fastcgi应用和http服务器不在同一个
6、机器上的数据流图:图二:fastcgi和http不在同一节点的数据流程序框架不同于cgi程序的单次执行特性,fastcgi的主程序框架有一个循环,如下:initialize application;while(fcgi_accept() = 0) process request;初始化部分,只执行一次,所以常常把一些耗时的工作放在此处理,如:打开和连接数据库,计算表和位图值等。另外初始化部分,还完成环境变量初始化等工作。然后,程序阻塞在fcgi_accep()调用上,一旦有连接上了就处理,否则就阻塞。一个简单的fastcgi程序实例:#include fcgi_stdio.h /* fcgi
7、library; put it first*/#include int count;void initialize(void) count=0;void main(void)/* initialization. */ initialize();/* response loop. */ while (fcgi_accept() = 0) printf(content-type: text/htmlrn rn fastcgi hello! (c, fcgi_stdio library) fastcgi hello! (c, fcgi_stdio library) request number %d
8、 running on host %sn, +count, getenv(server_hostname); 另外一个例子,是从stdin和环境变量获取表单参数的例子,由于代码过长,以附件形式给出:附录:cgi常用环境变量环境变量说明all_http未包括在本表格中给出的变量内的所有http标题,如:这个变量来自表格http_query_string传递给程式的 query 信息,即:在指向url中跟在问号(?)后的信息remote_host使用者发出 request 的远端 host 名称remote_addr使用者发出 request 的远端 ip 位址auth_type用来确定使用者合法
9、性的监定方法remote_user使用者的合法名称remote_ident发出 request 的使用者content_typequery 信息中的 mime 类型content_length以字节为单位的从客户端接收来的脚步长度http_form使用者发出 request 的电子邮件讯息http_acceptclient 可以接受的 mime 类型列表http_cookie与你站点打交道的客户的任何cookie(存储片)集合http_user_agentclient 用来发出 request 的浏览器gateway_interfaceserver 使用的 cgi 版本server_nameserver 的 host 名称或 ip 位址server_software回应 client request 的 server 软体名称和版本server_protocol传递资讯所用的协定名称或版本server_portserver 正在执行的 port numberserver_port_secure值为0或1,值1表示请求出现在加密端口url请求的url地址request_method发出 request 的方法path_i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年CCNP认证技能考核及答案
- 小学古诗词必背名句分类
- 汽车销售合同范本及理赔流程
- 部编版四年级语文课文专项教案设计
- 现代仓储管理流程优化与案例分析
- 高效项目管理进度控制技巧
- 通信工程概算与预算实务操作指南
- 项目管理基本流程及文档模板
- 2026年道路桥梁的整体性与耐久性研究
- 大型商场消防安全检查计划
- 2025国开《中国古代文学(下)》形考任务1234答案
- 肺部感染中医护理
- 租地合同协议书合同
- 《肺炎的CT表现》课件
- 粮食仓储设施建设维修资金申请报告
- 脑器质性精神障碍护理查房
- 中考英语听力命题研究与解题策略省公开课金奖全国赛课一等奖微课获奖课件
- 物联网智能家居设备智能控制手册
- 2023-2024学年湖北省武汉市东西湖区五年级(上)期末数学试卷(含答案)
- 怀化市2024-2025学年高一上学期期末地理试题(含答案解析)
- 全国班主任比赛一等奖《班主任经验交流》课件
评论
0/150
提交评论