5分钟极速|C++服务框架|OATPP框架

前言

       嗨喽,好久不见呀,前几天忙于实习的安顿,没来得记更新博文,好苦呀🥹。这次为大家带来一种有点不合乎常规的框架学习,是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}"
作者:JMing 原创文章,转载引用请标明。

评论

  1. Macintosh Chrome
    1 年前
    2025-1-28 15:50:12

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

    来自江苏

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇