免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7156 | 回复: 19
打印 上一主题 下一主题

Fast CGI 工作原理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-18 11:49 |只看该作者 |倒序浏览
标准在哪里呀?
网找的文章都是说它怎么怎么好.具体的都不讲.

我想知道,假如我用纯C语言怎么样才能写出符合FastCGI标准的程序?
如果FastCGI在http服务器中以进程池方式实现,那么服务器是怎么样与子进程通信来分派新的request任务?

论坛徽章:
0
2 [报告]
发表于 2009-11-18 12:02 |只看该作者
perl的fastcgi实现不怎么样,就是一个死循环驻留在那里。。
进程间通信是用户自己的事,比如共享内存。

论坛徽章:
0
3 [报告]
发表于 2009-11-18 12:58 |只看该作者
"死循环",偶特喜欢.
while(条件){
...
}
我只是想知道Fast CGI的循环"条件"是怎么得到的.

论坛徽章:
0
4 [报告]
发表于 2009-11-18 13:23 |只看该作者

回复 #3 rrrrrrrr8 的帖子

这个是FastCGI模块自己设置的吧~

论坛徽章:
0
5 [报告]
发表于 2009-11-18 15:31 |只看该作者
原帖由 兰花仙子 于 2009-11-18 13:23 发表
这个是FastCGI模块自己设置的吧~

论坛徽章:
0
6 [报告]
发表于 2009-11-18 19:06 |只看该作者
FastCGI的工作原理是:
一个驻留程序,已经通过listen侦听了一个端口,其循环条件就是调用accept函数,接收连接,处理完请求以后,进入下一个循环继续accept。

我比较喜欢用perl的fastcgi,应该是各种web技术中最快的一种,写程序也非常简单,就是调试起来麻烦一点。因为其是驻留的,每次修改都必须重新启动web服务器,不过可以写一个cgi程序调试。cgi和fastcgi的主程序都只要20~30行代码即可。

论坛徽章:
0
7 [报告]
发表于 2009-11-18 19:15 |只看该作者
你如果要用C,只要accept(0, x, x)即可。
因为文件描述符是0,这个是用webserver的fastcgi模块处理的,它首先调用socket创建一个文件描述符,并listen一个端口,然后通过dup2,把标准描述符0覆盖了。然后调用fork和exec创建fastcgi程序。
所以你循环应该是:
while(fd = accept(0, xx, xx)
{
     
}
不过我不知道fd是不是为1,在perl中,print会输出到浏览器,看起来应该是1似的。

[ 本帖最后由 billypeng 于 2009-11-18 19:17 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2009-11-18 20:02 |只看该作者
原帖由 billypeng 于 2009-11-18 19:06 发表
FastCGI的工作原理是:
一个驻留程序,已经通过listen侦听了一个端口,其循环条件就是调用accept函数,接收连接,处理完请求以后,进入下一个循环继续accept。

我比较喜欢用perl的fastcgi,应该是各种web技 ...


我以前测试perl的fastcgi比mod_perl慢。
C写的fastcgi要快很多,不必集成到apache里,可以是独立的守护程序,通过socket与apache通信。

论坛徽章:
0
9 [报告]
发表于 2009-11-18 21:40 |只看该作者
原帖由 兰花仙子 于 2009-11-18 20:02 发表


我以前测试perl的fastcgi比mod_perl慢。
C写的fastcgi要快很多,不必集成到apache里,可以是独立的守护程序,通过socket与apache通信。


因为我不用apache做服务器,所以无法测试mod_perl的速度,看你的帖子,mod_perl是把perl集成了,但cgi程序还得每次重新装载,重新编译。

在lighttpd下,fastcgi的应用程序就是几个单独的守护进程,既可以由lighttpd启动,也可以由其他程序启动,甚至可以在其他机器上启动(实现负载均衡)。因为与web服务器无关了,而且已经加载到内存,编译好了,速度应该是最快的。当然与其他嵌在webserver下的解释器相比,多了一层通讯,这层通讯的影响有多大,我倒没有测试过。

论坛徽章:
0
10 [报告]
发表于 2009-11-19 08:56 |只看该作者

回复 #9 billypeng 的帖子

请教个问题.
fastcgi的应用程序就是几个单独的守护进程,既可以由lighttpd启动,也可以由其他程序启动 -- 请问这个是指 spawn-fcgi ?
对于 lighty 的 perl fastcgi 支持上,官方是通过一个叫 distpatch.fcgi 脚本来做的,请问这个脚本和 spawn-fcgi 之间是什么关系?还有自己写的fastcgi脚本和 distpatch.fcgi 又有什么关系?
谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP