如何在apache服务器上使用c++
How to use C++ for apache server
我们可以将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/
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 有没有办法知道Tracer是否成功地完全连接到了jaegerclientcpp中的jaeger后端服务器
- 从服务器传输到客户端的消息不会出现
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- OpenSSL TLS服务器-使用客户端证书白名单
- 我正在开发服务器,ip作为参数传递不起作用
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 提升 Asio TCP 服务器 处理多个客户端
- 如何在 Minecraft 服务器上执行命令
- 调试编译的服务器在数据库打开时崩溃
- C++套接字客户端到 Python 服务器未创建连接
- 用于解析 win64 堆栈跟踪的命令行客户端(可以访问符号服务器)
- 将相机数据从服务器实时流式传输到客户端
- 为什么创建服务器后C++ httplib 库阻塞了我的主线程?
- 每个服务器请求的内存预算
- 如何将 Firebase 与基于 Linux 的客户端应用配合使用,以便与服务器进行双向消息通信
- 使用嵌入式猫鼬服务器托管应用程序
- NodeJs 服务器充斥着 UDP 广播,不发送响应