当前位置: 首页 > 科技观察

一个轻量级、高性能的C++web框架

时间:2023-03-13 21:30:13 科技观察

说到web开发,大多数人会想到Java、Python、Golang...因为主流的web框架有很多,而Java有一个非常有名的Spring全家桶,Python有大而全的Django,小而精的Flask,还有高性能的Tornado。Golang还有快速灵活的Gin、Echo等框架。相比之下,C/C++阵营就逊色很多。之前写过一篇文章《C++ Web(HTTP)开发 10 大利器》介绍一些C/C++的web框架。有一个非常好的叫Oat++,轻量级、跨平台、高性能、完全零依赖。非常值得学习!1Oat++简介要深入理解Oat++,离不开这些网址:Oat++主页:https://oatpp.ioOat++文档:https://oatpp.io/docs/startGitHub地址:https://github.com/oatpp/oatpp的主要特点是:无需任何依赖即可在任何地方运行Oat++,并且可以轻松移植到各种支持的平台(Linux、MacOS、Windows)。使用Oat++Simple-API构建健壮的API,构建灵活而健壮的API既简单又有趣。处理500万个连接使用Oat++Async-API,可以在单个服务器上处理超过500万个并发连接。访问数据库Oat++ORM提供了一种简单且统一的方式来访问数据库保持代码一致Oat++依赖整个代码库中的对象映射来确保API和数据模型的一致性API文档是使用Swagger-UI和OpenAPI3.0.0自动生成的最吸引我的地方记录端点是HTTP/HTTPS、文件上传/下载和强大的SwaggerAPI功能。2编译Oat++进入Oat++的GitHub页面,你会发现最近几天有多达4K+Star,30多个贡献者,代码提交,所以不用担心人气和活跃度,这个框架一直在积极维护。环境要求Oat++的编译过程非常简单,只需要一个基本的开发环境:Git编译器支持的C++版本>=11MakeCMake版本>=3.1如果没有,按照下面的步骤安装,以Ubuntu为例:$sudoaptinstallgit$sudoaptinstallcmake$sudoaptinstallbuild-essential编译安装下载Oat++源码:$gitclonehttps://github.com/oatpp/oatpp.git然后执行编译安装四步:$cdoatpp/$mkdirbuild&&cdbuild$cmake。.$sudomake&&sudomakeinstall3示例程序为了演示Oat++,我们从最简单的“Hello,World!”开始!创建CMake工程,CMakeLists.txt配置如下:cmake_minimum_required(VERSION3.1)project(helloworld)set(CMAKE_CXX_STANDARD11)set(SOURCE_FILESmain.cpphandler.h)#Findoatppdependenciesfind_package(oatppREQUIRED)add_executable(${PROJECT_NAME}LE${SOURCE_FI})#将目标文件与库文件链接target_link_libraries(${PROJECT_NAME}oatpp::oatpp)默认情况下,Oat++将响应404响应客户端请求,不做任何其他操作。要添加自定义响应,必须实现HttpRequestHandler://handler.h#ifndefHANDLER_H#defineHANDLER_H#include"oatpp/web/server/HttpRequestHandler.hpp"#defineO_UNUSED(x)(void)x;//自定义请求处理程序classHandler:publiccoatpp::web::server::HttpRequestHandler{public://处理传入请求和返回响应std::shared_ptrhandle(conststd::shared_ptr&request)override{O_UNUSED(request);returnResponseFactory::createResponse(Status::CODE_200,"Hello,World!");}};#endif//HANDLER_H有了处理程序后,需要通过Router将请求路由到它://main.cpp#include"oatpp/web/server/HttpConnectionHandler.hpp"#include"oatpp/network/tcp/server/ConnectionProvider.hpp"#include"oatpp/network/Server.hpp"#include"handler.h"voidrun(){//用于HTTP请求创建routerautorouter=oatpp::web::server::HttpRouter::createShared();//路由GET-"/hello"请求到handlerrouter->route("GET","/hello",std::make_shared());//创建HTTP协议连接处理程序autoconnectionHandler=oatpp::web::server::HttpConnectionHandler::createShared(router);//创建TCP连接提供者autoconnectionProvider=oatpp::network::tcp::server::ConnectionProvider::createShared({"localhost",8000,oatpp::network::Address::IP_4});//创建一个服务器接受提供的TCP连接并将其传递给HTTP连接处理程序oatpp::network::Serverserver(connectionProvider,connectionHandler);//打印serverportOATPP_LOGI("MyApp","Serverrunningonport%s",connectionProvider->getProperty("port").getData());//运行服务器server.run();}intmain(){//初始化oatpp环境oatpp::base::Environment::init();//运行应用程序run();//销毁oatpp环境oatpp::base::Environment::destroy();return0;}4请求验证运行程序,在浏览器中访问http://localhost:8000/hello,提示信息“Hello,World!”会显示:或者用curl请求http://127.0.0.1:8000/hello,效果是一样的:$curlhttp://127.0.0.1:8000/helloHello,World!