如何用FastCGI应用程序扩展c++ HTTP服务器


How to extend C++ HTTP server with FastCGI applications?

我正在编写一个c++ HTTP服务器。但是,因为在c++中开发速度较慢,例如在PHP中,我也想支持FastCGI应用程序(PHP通过FastCGI, Python通过FastCGI等)。所以我想使用类似于mod_fcgi (Apache)的东西。有人知道一个好的c++ FastCGI库(不是应用程序,而是为web服务器)吗?我使用Poco库来编写web服务器。

另一个解决方案可能是在我的c++服务器中直接使用PHP解释器。有人知道这方面的例子吗?

所有的解决方案都必须考虑性能

如果你正在用c++编写CMS系统,你应该在c++中检查CppCMS web框架,它似乎非常快。

如果你想从头开始编写HTTP服务器,boost有一些关于如何设置HTTP服务器的示例。

现在,如果你想使用CGI,这是最慢的选择,有一个GNU Cdicc库来处理CGI

我昨天一直在看这个话题。您可能知道,fastcgi是建立在tcp或unix套接字上的,等待与特定协议的连接。

请求的方案如下:客户端连接到web服务器,web服务器连接到fastcgi应用程序。取决于实现(规范说,web服务器提供一个文件描述符连接到web客户端(accept() sockfd)到fastcgi应用程序。我还没有在nginx中看到这样的行为。

你怎么能实验?

  1. 安装nginx(配置非常简单,参见文档)
  2. 编译php(一个简单的。/configure——enable-fastcgi &&做就行。我花了30秒)
  3. 在本地主机端口9000上启动php-cgi (./sapi/cgi/php-cgi -b 127.0.0.1:9000)
  4. tcpdump/wireshark输出
  5. 现在停止php,运行一个简单的tcp服务器(例如nc -l 9000)

我发现fcgi规范是非常有用的,如果你想写自己的库。

我还没有找到fcgi客户端的C/c++代码,但是可以很容易地找到perl。

我找不到FastCGI客户端,所以我自己写了。做了很多工作,但我成功了:)它比普通的CGI快多了(呸!)。