在C中制作支持PHP的准系统,支持PHP的Web服务器?

gui*_*ar- 6 php c webserver fastcgi

我想在C中创建支持PHP的可能性最轻的HTTP服务器,如果它会产生巨大的差异,可能会使用FastCGI.

我不确定如何实现PHP支持.它是否只是通过.php文件的路径调用PHP.exe并读取输出?PHP中的header()之类的东西怎么样?那些服务器如何处理?

另一个问题是,为每个请求使用单独的线程是否理想?我不指望负载很重,但我对这个设计方面并不是100%肯定...

我对C和C++还很陌生,这是一次学习经历.

cle*_*tus 10

首先让我说如果目标是为PHP页面提供服务的轻量级HTTP服务器,那么这已经完成了.看看nginx.

至于学习经历,你选择的东西实际上相当艰难.

多线程在最好的时候很难.在C/C++(真的有手动内存分配的任何东西)上,它的难度要高出一个数量级.

除此之外还有网络通信.有一些怪癖需要处理,不同版本的HTTP(现在大部分都是非问题),各种HTTP标头要处理等等.

解决此问题的最直观的解决方案是拥有一个侦听端口的进程.当它收到请求时,它会生成一个进程,如果需要,它可以执行到PHP进程.

然而,这不会扩展.第一个(显而易见的)优化是使用线程而不是进程和某种形式的线程间通信.虽然这有所帮助,但它仍然只能扩展到目前为止.

超越它,你正在寻找异常套接字处理,这是相当低的水平.

然而,所有这些都是相当大的项目.

您是否有任何特殊原因要在C/C++中执行此操作?或者您正在学习其中一种或两种语言的任何特殊原因?这些语言肯定有它们的位置,但它们越来越成为小众语言.托管(垃圾收集)语言/平台几乎完全接管.Joel认为垃圾收集是关于过去20年中编程中唯一的巨大生产力增长,我倾向于同意.

  • 我不太确定完全接管了.Apache,Lighttpd,Nginx,Cherokee ...都是用C语言编写的.还有适合垃圾收集的malloc()替代C.我同意它主要是只有今天使用C的系统程序员,但我认为利基更大一点比你描述的. (3认同)