请教在apache上运行C语言编写的CGI的原理问题

请教在apache上运行C语言编写的CGI的原理问题

请教大家关于在apache上运行C语言编写的CGI的原理问题。(UNIX服务器上)

1.从客户端浏览器发过来的请求,apache会启动请求对应二进制文件的进程吗?

2.如果连续刷新页面(也就是连续发送同样的请求),apache端的处理是怎样的?是不是也会启动多个同样的二进制文件进程?

3.如果2成立的话,多个同样的进程是并行执行的么?

4.如果2成立的话,2启动的进程是否有时间限制?比如说是否在等待了多久以后还得不到执行的话会停止掉?
浏览器发送请求时候,CGI会在系统内启动一个进程,直到页面全部执行结束,进程就没了。

如果连续刷新,就会有N个进程。

所以说以CGI方式运行的话,用不了多久服务器就会因为进程太多,直接挂掉。

如果你想用C写的,可以参考下fastcgi形式。
还可以整合到Apache中,写成模块,或着直接写个服务器内置Web应用


QUOTE:
原帖由 xiaoyu9805119 于 2008-10-30 16:59 发表
浏览器发送请求时候,CGI会在系统内启动一个进程,直到页面全部执行结束,进程就没了。

如果连续刷新,就会有N个进程。

所以说以CGI方式运行的话,用不了多久服务器就会因为进程太多,直接挂掉。

如果 ...

绝无此事。 CGI方式不必任何其他模式差。  fastcgi根本就不适合互联网
谢谢上面几个兄弟的回复。根据大家的回复问题1,2我已经清楚了。

请问3,4的答案是?

我的Case是这样的:请求的相应进程都要调用另外一个常驻进程,我们假定名字是B,由于B只能有一个,所以所有的请求进程都得排队等待上一个进程调用完成以后,才能调用B。调用B的过程是先和B通信,然后B再从请求的进程中读取一些信息。现在有一个问题是,如果连续不断的刷新,可能会抛出一个错误,经过分析发现是B从请求进程中读取到的信息的长度为0(请求进程中肯定是有数据的)。怀疑原因是请求进程和B已经建立连接了,但是读取信息的时候请求进程已经关闭了,所以读取到的信息长度为0.

所以想了解通过apache启动的请求进程,是否有时间限制?(比如多久过后没有得到处理便kill这个进程)
cgi各个进程之间毫无关系,和你写程序fork进程是一回事、 timeout时间可以配置

你的情况结果肯定是一堆cgi请求B。  需要B进程足够强壮,能保证单例运行
如果能写出足够强大的程序,他还能提这个问题?

是的,只要水平足够牛b,什么模式运行都一样,甚至可以自己写一个web服务器出来也行。

fastcgi为什么不适合互联网?你看看多少应用是跑在fastcgi模式下的啊?
学习了,呵呵,我们项目也是用cgi的
不是水平都牛的问题。 他的程序要保障单例运行, 并且处理好队列。

fastcgi真的不错,  请举例那个应用是在fastcgi上,  sina,sohu那个网站用的是fastcgi?


QUOTE:
原帖由 北京野狼 于 2008-10-31 11:13 发表
不是水平都牛的问题。 他的程序要保障单例运行, 并且处理好队列。

fastcgi真的不错,  请举例那个应用是在fastcgi上,  sina,sohu那个网站用的是fastcgi?

那sina, sohu都用了啥?