【问题标题】:How to extend C++ HTTP server with FastCGI applications?如何使用 FastCGI 应用程序扩展 C++ HTTP 服务器?
【发布时间】:2011-08-03 14:21:35
【问题描述】:

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

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

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

【问题讨论】:

  • 只是好奇,你为什么要写一个 HTTP 服务器?
  • @dgorton 我们需要一个高性能的网络服务器(包括一个 CMS 系统)。包括我们自己的分析版本等。但是因为在 C++ 中开发速度较慢,我们想在 PHP 中做一些部分(首先,以后什么时候可以用 C++ 替换它们)。
  • apache、IIS、nginx、lighthttpd、mongoose等都太慢了?
  • 使用特殊的虚拟主机系统等时,自己的服务器更快。所以是的。但这不是问题......
  • SCGI 它本身很容易实现。但是我不知道 PHP 不支持它:P 所以我可能需要在我有时间的时候实现 FastCGI。

标签: php c++ poco fastcgi


【解决方案1】:

如果你是用 C++ 编写一个 CMS 系统,你应该用 C++ 签出CppCMS web framework,它似乎很快。

如果您想从头开始做更多的事情并编写 HTTP 服务器,boost 有一些关于如何设置 HTTP 服务器的示例here

现在,如果您想使用最慢的 CGI 选项,可以使用 GNU Cdicc 库来处理 CGI。

【讨论】:

  • 我已经有了一个很棒的 HTTP 服务器库(来自 Poco 的 HTTPServer)。不过还是谢谢。关于 GNU Cdicc,这似乎是用于创建(快速)CGI 应用程序,而不是用于使用该应用程序的网络服务器。
【解决方案2】:

我昨天一直在看这个话题。如您所知,fastcgi 是基于 tcp 或 unix 套接字构建的,等待与特定协议的连接。

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

你怎么做实验?

  1. 安装nginx(配置很简单,见documentation
  2. 编译 php(一个简单的 ./configure --enable-fastcgi && make 就可以了。我需要 30 秒)
  3. 在 localhost 端口 9000 (./sapi/cgi/php-cgi -b 127.0.0.1:9000) 上启动 php-cgi
  4. tcpdump/wireshark 输出
  5. 现在停止 php,并运行一个简单的 tcp 服务器(例如 nc -l 9000

我找到了fcgi specification,如果您想编写自己的库,这非常有用。我还没有(还)能够为 fcgi 的客户端找到 C/C++ 代码,但是对于 perl 来说很容易找到它。

【讨论】:

  • 谢谢。我也在看SCGI。因为 SCGI 作为 FastCGI 更容易实现。我让大家知道结果是什么。
【解决方案3】:

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

【讨论】:

  • 如果您能在代码中添加一个链接,或者如果可能的话,将其复制到这里就好了。
  • 你是在github上发的吗?
猜你喜欢
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
  • 1970-01-01
  • 2013-06-26
  • 2017-06-14
相关资源
最近更新 更多