目录
一.简介
二.编译Oat++
1.环境
2.编译/安装
三.试用
1.创建一个 CMake 项目
2.自定义客户端请求响应
3.将请求Router到服务器
4.用浏览器验证
一.简介
Oat++是一个面向C++的现代Web框架 官网地址:https://oatpp.io github地址:https://github.com/oatpp/oatpp Oat++具有如下特性: ●随处运行 Oat++没有任何依赖性,可以很容易地移植到各种支持的平台上(Linux、BSD、MacOS、OpenWRT、Windows)。 ●构建健壮的api 使用Oat++的Simple-API,很容易就能构建出灵活而健壮的High-Level API。 ●高并发 使用Oat++的Async-API,可以在单个服务器上处理超过500万个并发连接。 ●访问数据库 Oat++ ORM提供了一种简单而统一的方式来访问数据库。 ●保持代码一致 Oat++在整个代码中依靠对象映射(Object-Mapping)来确保API和数据模型的一致性。详见:更多 ●生成API文档 使用Swagger-UI和OpenAPI 3.0.0自动记录endpoints。详见:更多 Qat++可以应用于多种不同的领域,比如构建运行在嵌入式设备的REST API,构建微服务和高负载的云应用程序。目前主要的应用案例是IOT和Robotics。 那么在实践中该如何选择Oat++的API类型呢? 优先选择Simple API,因为它开发得更加完善。如果是并发任务,就可以考虑使用Async API了,Async API通常用于以下几种场景: ●文件上传、下载 ●向大量客户端推流 ●Websocket聊天服务器 说起Web开发,大多数人会想到 Java、Python、Golang ... ,因为用它们实现的主流Web框架有很多:Java有非常知名的Spring全家桶,Python有大而全的Django、小而精的Flask、高性能的Tornado,Golang也有快速灵活的Gin、Echo等框架。 不过现在做C/C++开发的同学可以收回羡慕的眼神啦,Oat++作为C/C++ Web框架的后起之秀,还是非常值得研究的。
二.编译Oat++
这里以Windows为例,其他平台可参考官网。
1.环境
Window 10 Visual Studio 2017(官网测试用的就是这个版本) CMake 3.25.1(推荐用最新版)
2.编译/安装
以管理员权限打开“VS 2017的开发人员命令提示符”窗口 否则安装的时候会报如下错误:
git clone https://github.com/oatpp/oatpp.git
cd oatpp
MD build
cd build
cmake ..
cmake --build . --target INSTALL
常用CMake参数表
参数默认值说明CMAKE_BUILD_TYPEDebug编译类型BUILD_SHARED_LIBSOFF默认值为OFF,此时 Oat++ 被编译Wie静态库.OATPP_BUILD_TESTSON如果设置为OFF,表示不编译testsOATPP_DISABLE_ENV_OBJECT_COUNTERSOFF如果设置为ON, 不统计oatpp对象(不检测内存泄漏),可以提升性能注意: 不要用OFF去编译或运行 tests, 因为tests不检测内存泄漏.OATPP_DISABLE_POOL_ALLOCATIONSOFF如果设置为ON,不使用 oatpp memory-pools.OATPP_COMPAT_BUILD_NO_THREAD_LOCALOFF编译时禁用thread_local特性,详见 #81.
几分钟就能编译安装完成,无报错。安装路径是:C:/Program Files (x86)/oatpp/lib/oatpp-1.3.0/oatpp 下图是执行cmake ..时的打印信息:
三.试用
1.创建一个 CMake 项目
CMakeLists.txt 配置如下:
cmake_minimum_required(VERSION 3.1)
project(HelloWorld)
set(CMAKE_CXX_STANDARD 11)
set(SOURCE_FILES main.cpp handler.h)
# 查找 oatpp 依赖
find_package(oatpp REQUIRED)
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
# 将目标文件与库文件进行链接
target_link_libraries(${PROJECT_NAME} oatpp::oatpp)
2.自定义客户端请求响应
handler.h
#ifndef HANDLER_H
#define HANDLER_H
#include "oatpp/web/server/HttpRequestHandler.hpp"
#define O_UNUSED(x) (void)x;
// 自定义请求处理程序
class Handler : public oatpp::web::server::HttpRequestHandler
{
public:
// 处理传入的请求,并返回响应
std::shared_ptr
O_UNUSED(request);
return ResponseFactory::createResponse(Status::CODE_200, "Hello, World!");
}
};
#endif // HANDLER_H
3.将请求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 - "/HelloWorld" 请求到处理程序
router->route("GET", "/HelloWorld", std::make_shared
// 创建 HTTP 连接处理程序
auto connectionHandler = oatpp::web::server::HttpConnectionHandler::createShared(router);
// 创建 TCP 连接提供者
auto connectionProvider = oatpp::network::tcp::server::ConnectionProvider::createShared({"localhost", 8000, oatpp::network::Address::IP_4});
// 创建服务器,它接受提供的 TCP 连接并将其传递给 HTTP 连接处理程序
oatpp::network::Server server(connectionProvider, connectionHandler);
// 打印服务器端口
OATPP_LOGI("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/HelloWorld,就会显示“Hello,World!”
参考链接:https://waleon.blog.csdn.net/article/details/120376280 原文链接:Qat++,轻量级开源C++ Web框架-CSDN博客
相关阅读
发表评论