讲起 Web 合作开发,大多数人能想到 Java、Python、Golang …因为它们的非主流 Web 架构有很多,Java 有十分著名的 Spring 全家人桶,Python 有雄猫的 Django、中高的 Flask、高效能的 Tornado,Golang 也有快速灵巧的 Gin、Echo 等架构。相对而言,C/C++派系则略逊不少。之前,我曾写过一则《C++ Web(HTTP)合作开发10大利器》,其中如是说了一些 C/C++ Web 架构。有两个名叫 Oat++的很不错,高性能、虚拟化、高效能、完全零倚赖,十分值得学习!1 Oat++如是说要深入细致了解 Oat++,有赖于这几个邮箱:Oat++主页:oatpp.ioOat++文档格式:oatpp.io/docs/startGitHub 门牌号:github.com/oatpp/oatpp其主要优点有:随地运行Oat++没任何倚赖性,能很容易地移植到各种全力支持的网络平台上(Linux、MacOS、Windows)。构筑强壮的api采用 Oat++ Simple-API,构筑灵巧而强壮的 API 既单纯又有意思。处置500亿个相连采用 Oat++ Async-API,能在一般而言伺服器上处置超过500亿个mammalian相连。出访资料库Oat++ ORM 提供了一种单纯而统一的方式来出访资料库保持标识符一致Oat++在整个标识符复本倚靠对象态射来保证 API 和数据模型的连续性聚合 API 文档格式采用 Swagger-UI 和 OpenAPI 3.0.0载入 endpoints最招揽我的是 HTTP/HTTPS、文档上传/浏览、以及强悍的 Swagger API 功能。2校对 Oat++进入 Oat++的 GitHub 网页,你会发现 Star 共约4K+,COBOL有30多个,且最近几天还有标识符递交,所以不用担心关注度和关注度,这个架构一直有人在积极地保护。环境要求Oat++的校对过程很单纯,只需要有基本的合作开发自然环境要是:Git校对器全力支持的 C++版>=11MakeCMake 版>=3.1如果没的话,按照前述关键步骤加装,以 Ubuntu 为例:$ sudo apt install git$ sudo apt install cmake$ sudo apt install build-essential拷贝标识符校对加装浏览 Oat++源代码:拷贝标识符$ git clone https://github.com/oatpp/oatpp.git拷贝标识符随后,执行校对加装三部曲:$ cd oatpp/$ mkdir build && cd build$ cmake ..$ sudo make && sudo make install拷贝标识符3实例流程为了模拟 Oat++,我们从最单纯的“Hello, World!”开始!建立两个 CMake 项目,CMakeLists.txt 配置如下表所示:cmakeminimumrequired(VERSION 3.1)project(helloworld)set(CMAKECXXSTANDARD 11)set(SOURCEFILES main.cpp handler.h)#搜寻 oatpp 倚赖findpackage(oatpp REQUIRED)addexecutable(${PROJECTNAME}${SOURCEFILES})#将目标文档与库文档进行镜像targetlinklibraries(${PROJECTNAME} oatpp::oatpp)拷贝标识符预设情况下,Oat++会对应用流程允诺积极响应404,除此以外什么都不做。若要加进自订积极响应,必须实现 HttpRequestHandler:拷贝标识符// handler.h#ifndef HANDLERH#define HANDLERH#include “oatpp/web/server/HttpRequestHandler.hpp”#define OUNUSED(x)(void)x;//自订允诺处置流程class Handler : public oatpp::web::server::HttpRequestHandler{public://处置传入的允诺,并返回积极响应 std::sharedptr handle(const std::sharedptr& request) override { OUNUSED(request); return ResponseFactory::createResponse(Status::CODE200,”Hello, World!”);}};#endif // HANDLERH拷贝标识符有了处置流程之后,需要通过 Router 将允诺路由到它:// main.cpp#include “oatpp/web/server/HttpConnectionHandler.hpp”#include “oatpp/network/tcp/server/ConnectionProvider.hpp”#include “oatpp/network/Server.hpp”#include “handler.h”void run(){//为 HTTP 允诺建立路由器 auto router = oatpp::web::server::HttpRouter::createShared();//路由 GET -“/hello”允诺到处置流程 router->route(“GET”,”/hello”, std::makeshared());//建立 HTTP 相连处置流程 auto connectionHandler = oatpp::web::server::HttpConnectionHandler::createShared(router);//建立 TCP 相连提供者 auto connectionProvider = oatpp::network::tcp::server::ConnectionProvider::createShared({“localhost”,8000, oatpp::network::Address::IP4});//建立伺服器,它接受提供的 TCP 相连并将其传递给 HTTP 相连处置流程 oatpp::network::Server server(connectionProvider, connectionHandler);//打印伺服器端口 OATPPLOGI(“MyApp”,”Server running on port %s”, connectionProvider->getProperty(“port”).getData());//运行伺服器 server.run();}int main(){//初始化 oatpp 自然环境 oatpp::base::Environment::init();//运行应用 run();//销毁 oatpp 自然环境 oatpp::base::Environment::destroy(); return 0;}拷贝标识符4允诺验证运行流程,在浏览器中出访 http://localhost:8000/hello ,就会显示“Hello, World!”信息了:或者采用 curl 允诺 http://127.0.0.1:8000/hello,效果一样:$ curl http://127.0.0.1:8000/hello