如何在Apache服务器上使用C++

Suy*_*han 24 c++ apache

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

是否也可以使用带有apache的C/C++并在其中构建网站?

Hel*_*rld 19

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

服务器应用程序编程接口(SAPI)是用于指定Web服务器应用程序(如Apache HTTP Server,Microsoft IIS或iPlanet)的直接模块接口的通用术语.

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

0.先决条件: Apache2,Linux,命令行访问.

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

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

3.编译:

apxs2 -a -c mod_sample.c
Run Code Online (Sandbox Code Playgroud)

如果您已编写自己的文件,请相应地进行修改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>
Run Code Online (Sandbox Code Playgroud)

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

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


Did*_*set 13

有用.

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

对于C++中的高级站点(阅读Web 2.0),请查看Wt.

  • 它只写在这个答案的最后一行,但"Wt"框架是关键.看看它,它真的很棒! (5认同)

moo*_*oom 5

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

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

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

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