【问题标题】:How to use C++ for apache server如何将 C++ 用于 apache 服务器
【发布时间】:2011-08-02 13:21:29
【问题描述】:

我们可以将php、perl、python与apache集成并在其中构建站点。

是否也可以将 C/C++ 与 apache 一起使用并在其中构建网站?

【问题讨论】:

  • 技术上是的,但相信我:你不想这样做。
  • 为什么会这样?我只是喜欢 c++,所以我想为什么不开始在网站上使用它呢?
  • 当他们说 php/python/etc 时他们没有告诉你什么。是所有做实际工作的管道都是用 C++ 或类似的东西完成的。 Web 服务器、Web 服务和数据库不是用 python 编写的。
  • @Jay 完全无关。按照这个逻辑,我们都在使用汇编,因为这就是写“管道”的内容。
  • 正如我所说,适合工作的正确工具。如果工作是一个使用率较低的站点 python/php/etc。没事。如果你正在实施一个搜索引擎,那就完全不同了。在不了解开发站点的要求的情况下,您无法用“X 始终是正确的语言选择”来如实回答这个问题。我真的不信任任何说答案是“不言而喻”的人。如果是我就不会发表反驳。

标签: c++ apache


【解决方案1】:

存在三种解决方案:Cgi、Fastcgi、SAPI。 我将解释最后一个。

Server Application Programming Interface (SAPI) 是用于指定 Web 服务器应用程序(例如 Apache HTTP Server、Microsoft IIS 或 iPlanet)的直接模块接口的通用术语。

换句话说,您可以编写一个由您的 Web 服务器加载的 C/C++ 库(不是“真正的”库,只是一个文件)。我将解释如何在 Linux 上使用 Apache2 完成此操作:

0。先决条件: Apache2、Linux、命令行访问。

1.获取 apxs2,,它会自动编译并从 C/C++ 文件中生成一个 Apache2 兼容模块(.so 文件)。在 Ubuntu/Debian 上获取它的最简单方法是 sudo apt-get install apache2-threaded-dev

2。按照the official guide 中的说明编写您的 C/C++ 代码。或者,您可以使用:apxs2 -g -n sample 快速自动生成示例代码。这将产生几个文件,唯一感兴趣的是mod_sample.c

3.编译:

apxs2 -a -c mod_sample.c

如果您已经编写了自己的文件,请相应地修改mod_sample.c。 生成的 .so 与 Apache2 兼容,并将存储在您的 Apache 模块目录中。

4.通过修改/etc/apache2/apache2.conf 并添加:

告诉 apache 加载模块
LoadModule poc_rest_module /usr/lib/apache2/modules/mod_poc_rest.so
<Location /poc_rest>
    SetHandler poc_rest
</Location>

您的路径可能会有所不同(/etc.../usr/lib...),具体取决于您的发行版和安装设置。另请注意,poc_rest_module 只是模块的名称,可能会更改。最后,请注意,在此示例中,仅当导航到 example.com/poc_rest 时才会调用该模块。

5.重启 Apache 以重新加载配置:sudo service apache2 restart

【讨论】:

  • 感谢您的回答!我需要编写一些 C++ 并让它在 HTTP 服务器的进程内运行,这是解决这两个问题的唯一答案。但是,您链接到的官方指南根本没有讨论 C++。我在使它工作时遇到了一些麻烦,我已经打开了一个问题here 详细说明了我的尝试;如果您之前成功制作过 C++ 模块,我希望您能就我做错的地方提供意见。
  • 你只需要说如何告诉apache加载的模块必须解析哪些文件扩展名。此外,你没有解释 C++/Apache 接口应该是怎样的。
【解决方案2】:

有效。

您可以使用 CGI 做一些基本的事情:对于您网站上的地址的每个请求,Apache 都会使用给定的可执行文件启动一个新进程。该可执行文件可以是 C++。缺点是为每个请求创建一个新进程。为了获得更好的结果,您可以使用 FastCGI,其中 CGI 进程可以针对多个不同的请求运行。

对于 C++ 中的高级网站(阅读 web 2.0),请查看 Wt

【讨论】:

【解决方案3】:

如果你想编写一个网站,你真的需要一个非常深的库,所有那些“其他”语言都提供开箱即用的库。如果您使用 Apache 来实现大部分功能,那么 C++ 不是最佳选择。

如果您仍然喜欢冒险并且想使用 C++ 创建自己的自定义 Web 服务器,请尝试 boost::asio。提供了一个example http server,它将请求解析为路径并从文件系统返回html文件。

专业人士:除了 C 或汇编程序之外,没有任何东西可以与您使用 C++ 获得的低级控制相匹配。例如,我的 Web 服务器处理一个非常具体的 RESTful API,仅此而已。

Con:您将自己做很多工作,而不是深度库支持,因此请为此做好准备。例如,我刚刚添加了基本身份验证 - 我必须查找适当的 HTTP RFC,编写自己的基本标头,并使用 Base64 编码来对用户名和密码进行编码。但我喜欢这样 - 我确切地知道最后一个字节发生了什么。

【讨论】:

    【解决方案4】:

    阅读所有答案后,我想到了一个最简单的想法,即使用 C++ 而不是 PHP/Python/Perl。

    为了进行论证,我将使用 PHP 语法和约定。

    Php 扩展是用 C/C++ 编写并编译的。因此,与其浪费时间在前端服务器和我们的 C 代码之间建立桥梁,我们只需用 C 编写整个网站逻辑,并将其转换为 PHP 扩展或 Python/Perl 库。由于任何人都会使用 C/C++ 而不是 PHP/Python/Perl 来提高速度,所以这个解决方案是一个不错的选择。

    我们的 PHP 代码只会调用 C 代码公开的初始化函数,并打包为扩展。

    这不仅是另一种选择,而且还会阻止业余爱好者添加 将 C 代码直接暴露给 Apache 时出现不需要的错误。

    【讨论】:

      【解决方案5】:

      您的一些选择是:(快速)CGI、编写 Apache module 或使用与 Apache 配合使用的更高级别的 C++ 框架。

      【讨论】:

        【解决方案6】:

        最好的选择之一是使用 SWIG 为 Apache 生成 PHP 或 Perl 模块。通过这种方式,可以直接将 C++ 类或 C/C++ 方法或变量与 PHP 接口,并从 Web 服务器访问它。在这个例子中,他们将计算困难的部分移动到动态 C++ 库http://novorado.com/2014/12/custom-c-module-for-apache-web-server/

        【讨论】:

          猜你喜欢
          • 2012-07-22
          • 2014-02-12
          • 2020-03-03
          • 2015-06-06
          • 2023-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多