网站大量收购闲置独家精品文档,联系QQ:2885784924

用C语言开发FastCGI应用程序资料.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用C语言开发FastCGI应用程序 I/O函数包   FastCGI软件开发套件,开源的WebServer 2.0服务器包含I/O函数包用与简化把已存在的CGI程序转成FastCGI程序或者编写FastCGI程序,在开发套件中有两个函数包:fcgi_stdio 和 fcgiapp,在你的程序中必须包含这些包中的一个:   fcgi_stdio.h fcgiapp.h fcgi_stdio包,是fcgiapp包的顶层包,在转化CGI程序或者是写新的FastCGI程序是,我们强烈推荐你用它,fcgi_stdio包有以下几个优点:   简单:只要有三个性的API需要学。   易懂:如果你正包CGI程序转化为FastCGI程序,你会发现CGI程序与FastCGI程序之间只有很少的区别。在我们设计函数库的时候我们尽可能的 把FastCGI应用程序变得容易理解,以至于我们在建立新FastCGI程序的时候我们使用相同的环境变量,相同的解析查询字符串的技术,以及相同的 I/O程序等。   方便:这个库函数提供了CGI和FastCGI二进制的文件的完美兼容。因此不管是CGI还是FastCGI,都同样运行。   代码结构   FastCGI的代码构成,把你的代码分成两个独立部分:   1.初始化部分:只执行一次   2.应答循环部分:FastCGI脚本每被调用一次,这部分九被执行一次      一个应答循环的典型格式如下:   while (FCGI_Accept() = 0) {//循环条件      # 应答循环体      }      知道一个客户端请求来的时候FCGI_Accept块才执行,并返回0。如果有一个系统故障,或是系统管理员终止进程,Accept将返回-1。   如果应用程序作为一个CGI程序被调用,那么第一次调用Accept时,返回0,第二次总是返回-1,产生CGI行为。(请详见20页的FCGI_Accept (3) )   注意,在CGI中鼓励用小脚本,然而在FastCGI中则鼓励使用组合式的脚本。你可以在从新构想你的程序的全局结构,来获得FastCGI的高性能。   例1: TinyFastCGI   这是一个用C语言写的一个简单FastCGI应答程序例子:   #include fcgi_stdio.h      #include stdlib.h      int count;      void initialize(void)   {   count=0;   }      void main(void)   {      initialize();         while (FCGI_Accept() = 0) {   printf(Content-type: text/html      titleFastCGI Hello! (C, fcgi_stdio library)/title   h1FastCGI Hello! (C, fcgi_stdio library)/h1   Request number %d running on host i%s/i ,   ++count, getenv(SERVER_HOSTNAME));   }   }   例2:原始数据产生器   思考一下,一个应答应用程序产生第N次原始数据。   一个CGI应用程序将没有有效的方法来解决这个问题。例如,如果用户访问第50000次的原始数据,那么CGI应用程序就不许从第一条原始数据开始计算,知道第50000条的,要是应用程序终止,伴随着她辛苦积累的数据也会随之消失。   如果一个客户端想访问第4900条原始数据,那么服务器必须重新开始积累。   由于我们能维持这个状态,FastCGI应用程序对与这样的问题就更有效。一个FastCGI应用程序在初始化阶段能够计算一个扩展的源数据的表,并保持表的不同范围。当客户端请求一个特别原始数据的时候,循环应答需要从表里查询。   这里有一个原始数据代码事例:   #include fcgi_stdio.h   #include stdlib.h   #include string.h      #define POTENTIALLY_PRIME 0   #define COMPOSITE 1   #define VALS_IN_SIEVE_TABLE 1000000   #define MAX_NUMBER_OF_PRIME_NUMBERS 78600         long int sieve_table[VALS_IN_SIEVE_TABLE];   long int prime_table[MAX_NUMBER_OF_PRIME_NUMBERS];      void   i

文档评论(0)

xiaofei2001129 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档