如何在apache服务器上使用c++

How to use C++ for apache server

本文关键字:c++ 服务器 apache      更新时间:2023-10-16

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

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

有三种解决方案:Cgi, Fastcgi, SAPI。我将解释最后一个。

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

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

0。前提条件: Apache2, Linux,命令行访问权限

1。获取apxs2,,它自动编译并从C/c++文件中生成Apache2兼容模块(.so文件)。在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

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

4。告诉apache通过修改/etc/apache2/apache2.conf和添加:

来加载模块
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 .

成功了

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

对于c++中的高级站点(阅读web 2.0),请查看Wt。

如果你想编写一个网站,你真的需要一个相当深的库,所有这些"其他"语言都提供了开箱即用的功能。如果你使用Apache来实现大部分的功能,c++并不是最好的选择。

如果你仍然觉得冒险,你想用c++创建自己的自定义web服务器,试试boost::asio。这里提供了一个示例http服务器,它将请求解析为路径,并从文件系统返回html文件。

优点:除了C或汇编语言之外,没有其他语言可以与c++的低级控制相匹配。例如,我的web服务器处理一个非常具体的RESTful API,没有其他。

缺点:比起深入的库支持,你需要自己做很多工作,所以要做好准备。例如,我刚刚添加了Basic Authentication—我必须查找适当的HTTP rfc,编写我自己的Basic报头,并加入Base64编码来编码用户名和密码。但是我喜欢这样——我知道到底发生了什么直到最后一个字节

在阅读了所有的答案后,我想到了一个最简单的想法,用c++代替PHP/Python/Perl。

为了创建参数,我将使用PHP语法和约定。

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

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

这不仅是可选的,而且还可以防止业余爱好者添加

您的一些选择是:(快速)CGI,编写Apache模块或使用一些与Apache一起工作的高级c++框架

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