首页 > *nix技术, lighttpd, 应用程序 > Lighttpd中CGI执行流程

Lighttpd中CGI执行流程

2013年5月11日 发表评论 阅读评论 7,000 次浏览

这是2009年05月20日写在CU的博客上的文章,现在转过来,呵呵。
从下图中,我们可以看到对于客户端的每一个请求(动态页面,也就是需要CGI处理的),Lighttpd进程都是先fork一个CGI进程,然后将请求头(通过环境参数)和请求体(通过管道)传递给CGI程序,等待CGI处理并将从CGI进程那接收到的处理结果再响应给客户端,然后将CGI终止(通过发送SIGTERM信号)。

CGI的处理有一些缺点,先不说其它的,单从图中可以看到的就有:首先,对于客户端的每一个请求都需要fork一个CGI进程,然后在该请求处理结束后又将该CGI进程kill掉,性能自然是不高的。其次,Web Server(这里指Lighttpd)和CGI之间通信采用无名管道(PIPE)进行通信,因此具有无名管道的所有缺点(比如:Web Server进程和CGI必须具有亲缘关系;管道是半双工的,数据只能向一个方向流动,因此为了使Web Server和CGI进行双方通信,必须建立起两个管道等等)。由这两个缺点就衍生出很多其它的缺点,比如基本无法进行分布式部署和在CGI侧进行负载均衡等。

CGI的相关信息可以查看地址:http://www.w3.org/CGI/

转载请保留地址:http://www.lenky.info/archives/2013/05/2281http://lenky.info/?p=2281


备注:如无特殊说明,文章内容均出自Lenky个人的真实理解而并非存心妄自揣测来故意愚人耳目。由于个人水平有限,虽力求内容正确无误,但仍然难免出错,请勿见怪,如果可以则请留言告之,并欢迎来讨论。另外值得说明的是,Lenky的部分文章以及部分内容参考借鉴了网络上各位网友的热心分享,特别是一些带有完全参考的文章,其后附带的链接内容也许更直接、更丰富,而我只是做了一下归纳&转述,在此也一并表示感谢。关于本站的所有技术文章,欢迎转载,但请遵从CC创作共享协议,而一些私人性质较强的心情随笔,建议不要转载。

法律:根据最新颁布的《信息网络传播权保护条例》,如果您认为本文章的任何内容侵犯了您的权利,请以Email或书面等方式告知,本站将及时删除相关内容或链接。

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.