如何使用C ++的Apache服务器

我们可以将php,perl,python与apache整合起来,并在其中build立网站。

是否也可以使用C / C ++与Apache和build立网站?

有用。

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

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

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

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

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

先决条件: 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模块目录。

4.通过修改/etc/apache2/apache2.conf 告诉apache加载模块并添加:

 Loadmodulee 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

如果你想编码一个网站,你真的想要一个非常深的图书馆,所有这些“其他”的语言提供了开箱即用。 如果你使用Apache的大部分功能,C ++不是最好的选择。

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

临:除C或汇编程序之外,没有其他任何东西可以与您用C ++获得的底层控件相匹配。 例如,我的Web服务器处理一个非常具体的RESTful API,没有别的。

Con:而不是深厚的图书馆支持,你会自己做很多工作,所以要做好准备。 例如,我只是添加了基本身份验证 – 我必须查找适当的HTTP RFC,编码我自己的基本标题,并放入Base64编码编码的用户名和密码。 但我喜欢这个 – 我知道到底是怎么回事,直到最后一个字节。

你可以看看fastcgi

你的一些选择是:(快速)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/

读完所有答案之后,我遇到了使用C ++而不是PHP / Python / Perl的最简单的方法。

为了说明问题,我将使用PHP语法和约定。

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

我们的PHP代码将调用一个由我们的C代码公开的启动函数,打包为一个扩展。

这不仅可以替代,而且还可以防止业余爱好者在将C代码直接暴露给Apache时添加不需要的错误。