前言
嗨喽,好久不见呀,前几天忙于实习的安顿,没来得记更新博文,好苦呀🥹。这次为大家带来一种有点不合乎常规的框架学习,是C++的,而且还是服务型的后端框架,主要类似于Spring后端这种框架。我也是新学习到的,可能也有疏漏的地方,如有错误,欢迎你的指正呀!感谢观看我博文的读者,在这里感激不尽🙏!
OK,今天要给你介绍的是C++的OATPP架构,这是一款后端的架构,话不多说,直接进入正题!
OATPP服务架构介绍
想必你一定很好奇,既然Java有Spring框架了,人家都是专门做后端的,为啥要来折腾C++,这不是给自己找事吗?
是的,没错!Java确实是专门为后端而生的,但是相比于C++来说,装一个JDK,在启动一个服务基础内存就差不多到1GB,对于一些小型的服务器来说或者是小服务来说太折磨它了,但是今天要介绍的OATPP框架,你敢相信基础服务内存就只有10M吗?它就只有10M大小!!!这对于一些小型的服务,特别是物联网架构来说简直就是福音,一块小开发板足以胜任👍。 而且更重要的是,Spring有的它也有,神不神奇!
官网
来,让我们来看看是什么样的,现看看仓库官网:OAT++-GitHub
架构
哈哈哈,看不出来啥吧,那就别看了,来,我教你,我和你讲。咱们先看一下架构图啊,上图:

熟不熟悉?那必须,这,这不是SpringBoot的框架吗?对,没错,像,但是不一样,因为这个框架是我用C++的OATPP框架来自己搭的,可以看到淡化了DAO层,改成Other了,因为可能一些小的物联网项目根本用不上数据库!
既然是像SpringBoot架构,哪我就不多解释了,说明一下这里我自己加了CROS层,这一层主要是为了安全考虑,拦截层,一些鉴权就是在这里面的。整个服务框架的接口是典型的RESTful风格,而且还内置了OpenAPI Swagger,你就说好不好吧。
框架实现
好了,那接下来就教你怎么实现这个后端的服务框架,实现一个轻量级,高性能并发的OATPP服务。(请注意!我接下来的演示都是在Linux上,Windows上没试过,大佬可以试试看看官方文档试试,文档在最后有链接)
安装部署
安装基本依赖应用
sudo apt update
sudo apt install make cmake g++ gcc git
拉取框架代码
git clone https://github.com/oatpp/oatpp.git
cd oatpp
编译安装
mkdir build && cd build
cmake ..
sudo make -j 4 # 这里的是CPU核心数,根据自己的修改
sudo make install
构建代码
建立一个代码文件夹,然后建立出上面的架构了。可以参考Step by step | Oat++
如果需要我的代码,记得在评论区评论哦~

src
├── config
│ └── AppComponent.hpp
├── controller
│ └── MyController.hpp
├── cros
│ ├── AuthInterceptor.cpp
│ └── AuthInterceptor.hpp
├── dto
│ └── MessageDTO.hpp
├── Main.cpp
└── service
├── MyService.cpp
└── MyService.hpp
编译运行
cd build
cmake ..
make -j 4
./Oat++
最终效果:

第一次请求被拦截器拦截了,说明是框架成立!
运行前负载:


运行后负载:


呃,什么情况?内存还降低了?可能是开了一个code-server吧,有影响,但是可以看到,几乎就很低的内存好吧。
总结
好了,本期的介绍就到这里了,这一款框架还是特别适用于物联网的,高性能,高并发且低负载。对于其OATPP的使用架构是我自己规划的,其代码也是参考着写的。如果有不对的地方欢迎你的指正呀!
这里补充其OATPP的官网:Oat++ 。(这里面的资料还是很重要的,至于能不能化为己用就看你的造化了)
那就拜拜👋了,下期见呀!宝宝休息了😜~
附录
oatpp编译脚本(build-linux.sh)
#!/bin/bash
set -e
#!/bin/bash
# 构建脚本:配置并编译项目
set -e # 开启错误检查,任何命令执行失败则退出脚本
# 获取脚本所在目录的绝对路径
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
BUILD_DIR="${SCRIPT_DIR}/build"
echo "脚本目录: ${SCRIPT_DIR}"
echo "构建目录: ${BUILD_DIR}"
# 检查并创建 build 目录
if [ -d "${BUILD_DIR}" ]; then
echo "检测到已存在的 build 目录。"
read -p "是否要删除并重新创建?(y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo "正在删除旧的 build 目录..."
rm -rf "${BUILD_DIR}"
else
echo "使用现有 build 目录。"
fi
fi
if [ ! -d "${BUILD_DIR}" ]; then
echo "创建 build 目录..."
mkdir -p "${BUILD_DIR}"
fi
# 进入 build 目录
echo "进入构建目录: ${BUILD_DIR}"
cd "${BUILD_DIR}"
# 获取 CPU 核心数,并计算编译线程数 (核心数 - 1)
CPU_CORES=$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 4)
if [[ $CPU_CORES -gt 1 ]]; then
JOB_COUNT=$((CPU_CORES - 1))
echo "检测到 ${CPU_CORES} 个 CPU 核心,使用 ${JOB_COUNT} 个线程进行编译"
else
JOB_COUNT=1
echo "检测到 1 个 CPU 核心,使用 1 个线程进行编译"
fi
# 执行 CMake 配置
echo "执行 CMake 配置..."
cmake -DOATPP_DISABLE_POOL_ALLOCATIONS=ON \
-DOATPP_THREAD_DISTRIBUTED_MEM_POOL_SHARDS_COUNT=1 \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON \
..
# 检查 CMake 是否执行成功
if [ $? -ne 0 ]; then
echo "错误: CMake 配置失败!"
exit 1
fi
echo "CMake 配置成功!"
# 使用 make 进行编译
echo "开始编译,使用 ${JOB_COUNT} 个线程..."
make -j${JOB_COUNT}
# 检查 make 是否执行成功
if [ $? -ne 0 ]; then
echo "错误: 编译失败!"
exit 1
fi
echo "编译成功完成!"
echo "构建产物位于: ${BUILD_DIR}"

学到了~等到过完年就得认真学习下python和c++了