如何使用C++ for Apache Server

8gsdolmq  于 2023-05-18  发布在  Apache
关注(0)|答案(6)|浏览(172)

我们可以将php、perl、python与apache集成,并在它们中构建站点。
是否也可以使用C/C++和apache,并在其中构建网站?

rseugnpd

rseugnpd1#

有三种解决方案:Cgi、Fastcgi、SAPI。我将解释最后一个。
Server Application Programming Interface(SAPI)是一个通用术语,用于指定与Web服务器应用程序(如Apache HTTP Server、Microsoft IIS或iPlanet)的直接模块接口。
换句话说,你可以编写一个C/C++库(不是一个“真实的的”库,只是一个文件),它由你的Web服务器加载。我将解释如何在Linux上使用Apache 2来实现这一点:

**0.先决条件:**Apache 2,Linux,命令行访问。
**1.获取apxs 2,自动编译生成C/C文件中兼容Apache 2的模块(.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与Apache 2兼容,并将存储在Apache modules目录中。

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

qco9c6ql

qco9c6ql2#

很管用
你可以使用CGI做一些基本的事情:对于您站点上的每一个地址的请求,Apache都会启动一个带有给定可执行文件的新进程。这个可执行文件可以是C++。缺点是为每个请求创建一个新进程。为了获得更好的结果,您可以使用FastCGI,其中CGI进程可以针对多个不同的请求运行。
对于C++中的高级站点(阅读web 2.0),请查看Wt

1qczuiv0

1qczuiv03#

如果你想编写一个网站,你真的需要一个相当深的库,所有那些“其他”语言提供的开箱即用。如果您使用Apache实现大部分功能,C不是最好的选择。
如果你仍然喜欢冒险,并且想使用C
创建自己的自定义Web服务器,试试boost::asio。提供了一个示例http服务器,它将把请求解析为路径,并从文件系统返回html文件。
优点:除了C或汇编程序之外,没有什么能与你用C++得到的低级控件相匹配。例如,我的Web服务器处理一个非常特定的RESTful API,其他什么都不处理。
缺点:你将自己做很多工作,而不是深入的库支持,所以要做好准备。例如,我刚刚添加了基本身份验证-我必须查找适当的HTTPRFC,编写我自己的基本头文件,并加入Base64编码来编码用户名和密码。但我喜欢这一点-我确切地知道到底发生了什么,直到最后一个字节。

72qzrwbm

72qzrwbm4#

在阅读了所有的答案之后,我想到了一个最简单的想法,用C代替PHP/Python/Perl。
为了进行论证,我将使用PHP语法和约定。
Php扩展是用C/C
编写的,并编译。因此,与其浪费时间在前端服务器和C代码之间搭建桥梁,我们只需用C语言编写整个网站逻辑,并将其转换成PHP扩展或Python/Perl库。由于任何人都会使用C/C++而不是PHP/Python/Perl来提高速度,所以这个解决方案是一个不错的选择。
我们的PHP代码将只调用一个由C代码公开的初始化函数,并打包为扩展。
这不仅是一种替代方法,而且还可以防止业余爱好者在将C代码直接暴露给Apache的同时添加不必要的bug。

bfnvny8b

bfnvny8b5#

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

p1iqtdky

p1iqtdky6#

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

相关问题