0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C++ Web开发中一个轻量级、高性能的大利器

Linux爱好者 来源:高效程序员 作者:Waleon 2021-10-29 10:40 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

说起 Web 开发,大多数人会想到 JavaPython、Golang ...因为它们的主流 Web 框架有很多,Java 有非常知名的 Spring 全家桶,Python 有大而全的 Django、小而精的 Flask、高性能的 Tornado,Golang 也有快速灵活的 Gin、Echo 等框架。

相比之下,C/C++ 阵营则逊色不少。之前,我曾写过一篇《C++ Web(HTTP)开发 10 大利器》,其中介绍了一些 C/C++ Web 框架。有一个名为Oat++的很不错,轻量、跨平台、高性能、完全零依赖,非常值得学习!

Oat++ 介绍

要深入了解Oat++离不开这几个网址:

  • Oat++ 主页:https://oatpp.io

  • Oat++ 文档:https://oatpp.io/docs/start

  • GitHub 地址:https://github.com/oatpp/oatpp

其主要特性有:

  • 随处运行

    Oat++ 没有任何依赖性,可以很容易地移植到各种支持的平台上(Linux、MacOS、Windows)。
  • 构建健壮的api

    使用 Oat++ Simple-API,构建灵活而健壮的 API 既简单又有趣。
  • 处理 500 万个连接

    使用 Oat++ Async-API,可以在单个服务器上处理超过 500 万个并发连接。
  • 访问数据库

    Oat++ ORM 提供了一种简单而统一的方式来访问数据库
  • 保持代码一致

    Oat++ 在整个代码库中依靠对象映射来确保 API 和数据模型的一致性
  • 生成 API 文档

    使用 Swagger-UI 和 OpenAPI 3.0.0 自动记录 endpoints

最吸引我的是 HTTP/HTTPS、文件上传/下载、以及强大的 Swagger API 功能。
2

编译 Oat++

进入 Oat++ 的 GitHub 页面,你会发现 Star 多达 4K+,贡献者有 30 多个,且最近几天还有代码提交,所以不用担心热度和活跃度,这个框架一直有人在积极地维护。

环境要求

Oat++ 的编译过程很简单,只需要有基本的开发环境就行了:

  • Git

  • 编译器支持的 C++ 版本 >= 11

  • Make

  • CMake 版本 >= 3.1

如果没有的话,按照下述步骤安装,以 Ubuntu 为例:

$sudoaptinstallgit
$sudoaptinstallcmake
$sudoaptinstallbuild-essential

编译安装

下载 Oat++ 源码:

$gitclonehttps://github.com/oatpp/oatpp.git

随后,执行编译安装四部曲:

$cdoatpp/
$mkdirbuild&&cdbuild
$cmake..
$sudomake&&sudomakeinstall

3

示例程序

为了演示 Oat++,我们从最简单的“Hello, World!”开始!

创建一个 CMake 项目,CMakeLists.txt 配置如下:

cmake_minimum_required(VERSION3.1)
project(helloworld)

set(CMAKE_CXX_STANDARD11)
set(SOURCE_FILESmain.cpphandler.h)

#查找oatpp依赖
find_package(oatppREQUIRED)

add_executable(${PROJECT_NAME}${SOURCE_FILES})

#将目标文件与库文件进行链接
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:publicoatpp::HttpRequestHandler
{
public:
//处理传入的请求,并返回响应
std::shared_ptrhandle(conststd::shared_ptr&request)override{
O_UNUSED(request);

returnResponseFactory::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请求创建路由器
autorouter=oatpp::createShared();

//路由GET-"/hello"请求到处理程序
router->route("GET","/hello",std::make_shared());

//创建HTTP连接处理程序
autoconnectionHandler=oatpp::createShared(router);

//创建TCP连接提供者
autoconnectionProvider=oatpp::createShared({"localhost",8000,oatpp::IP_4});

//创建服务器,它接受提供的TCP连接并将其传递给HTTP连接处理程序
oatpp::Serverserver(connectionProvider,connectionHandler);

//打印服务器端口
OATPP_LOGI("MyApp","Serverrunningonport%s",connectionProvider->getProperty("port").getData());

//运行服务器
server.run();
}

intmain()
{
//初始化oatpp环境
oatpp::init();

//运行应用
run();

//销毁oatpp环境
oatpp::destroy();

return0;
}

4

请求验证

运行程序,在浏览器中访问http://localhost:8000/hello,就会显示“Hello, World!”信息了:

或者使用 curl 请求http://127.0.0.1:8000/hello,效果一样:

$curlhttp://127.0.0.1:8000/hello
Hello,World!
责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Web
    Web
    +关注

    关注

    2

    文章

    1302

    浏览量

    73618
  • C++
    C++
    +关注

    关注

    22

    文章

    2122

    浏览量

    76696

原文标题:一个轻量级、高性能的 C++ Web 框架

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【CW32】uart_obj_fw 轻量级串口框架

    轻量级跨平台串口通信框架,专为资源受限的嵌入式设备设计。单个对象RAM占用最小68字节左右(不算缓冲区),ROM占用1-2k字节左右,功能支持裁剪,资源占用小并不代表低性能,该库参考了freeRTOS
    的头像 发表于 09-29 18:02 7419次阅读

    Crypto核心库:颠覆传统的数据安全轻量级加密方案

    传统加密方案常陷入“安全与性能”的二元悖论。Crypto核心库打破这僵局,通过轻量级架构与算法优化,实现加密解密的双向突破:在保障银行级安全的同时,将资源消耗压缩至极致,让数据安全“轻”装上
    的头像 发表于 08-04 14:44 519次阅读
    Crypto核心库:颠覆传统的数据安全<b class='flag-5'>轻量级</b>加密方案

    基于米尔瑞芯微RK3576开发板部署运行TinyMaix:超轻量级推理框架

    本文将介绍基于米尔电子MYD-LR3576开发平台部署超轻量级推理框架方案:TinyMaix 摘自优秀创作者-短笛君 TinyMaix 是面向单片机的超轻量级的神经网络推理库,即 TinyML
    发表于 07-25 16:35

    如何在RK3576开发板上运行TinyMaix :超轻量级推理框架--基于米尔MYD-LR3576开发

    本文将介绍基于米尔电子MYD-LR3576开发平台部署超轻量级推理框架方案:TinyMaix摘自优秀创作者-短笛君TinyMaix是面向单片机的超轻量级的神经网络推理库,即TinyML推理库,可以
    的头像 发表于 07-25 08:03 3985次阅读
    如何在RK3576<b class='flag-5'>开发</b>板上运行TinyMaix :超<b class='flag-5'>轻量级</b>推理框架--基于米尔MYD-LR3576<b class='flag-5'>开发</b>板

    Nginx和Apache的差异

    Nginx是 轻量级/高性能 的反向代理Web服务器,用于 HTTP、HTTPS、SMTP、POP3 和IMAP 协议。
    的头像 发表于 07-09 09:45 472次阅读

    Nginx常见面试题总结

    Nginx是 轻量级/高性能的反向代理Web服务器,用于 HTTP、HTTPS、SMTP、POP3 和 IMAP 协议。
    的头像 发表于 03-03 09:36 1531次阅读
    Nginx常见面试题总结

    源代码加密、源代码防泄漏c/c++与git服务器开发环境

    源代码加密对于很多研发性单位来说是至关重要的,当然每家企业的业务需求不同所用的开发环境及开发语言也不尽相同,今天主要来讲c++及git开发
    的头像 发表于 02-12 15:26 866次阅读
    源代码加密、源代码防泄漏<b class='flag-5'>c</b>/<b class='flag-5'>c++</b>与git服务器<b class='flag-5'>开发</b>环境

    基于OpenHarmony标准系统的C++公共基础类库案例:ThreadPoll

    。每个线程每秒打印1段字符串,10秒后停止。2、基础知识C++公共基础类库为标准系统提供了些常用的C++开发工具类,包括:文件、路径、字符串相关操作的能力增强接口
    的头像 发表于 02-10 18:09 594次阅读
    基于OpenHarmony标准系统的<b class='flag-5'>C++</b>公共基础类库案例:ThreadPoll

    热门前端框架:引领现代 Web 开发的潮流

    在当今快速发展的前端开发领域,热门前端框架如 React、Vue 和 Angular 等,成为了开发者构建高效、高性能 Web 应用的得力工具。它们各自具有独特的特点和优势,引领着现代
    的头像 发表于 01-22 10:08 925次阅读

    从Delphi、C++ Builder和Lazarus连接到Oracle数据库

    从 Delphi、C++ Builder 和 Lazarus 连接到 Oracle 数据库 Oracle 数据访问组件 (ODAC) 是组件库,它为 32 位和 64 位平台提供从 Delphi
    的头像 发表于 01-15 10:01 1343次阅读

    Spire.XLS for C++组件说明

    Spire.XLS for C++款专业的 C++ Excel 组件,可以用在各种 C++ 框架和应用程序中。Spire.XLS for C+
    的头像 发表于 01-14 09:40 1293次阅读
    Spire.XLS for <b class='flag-5'>C++</b>组件说明

    云服务器 Flexus X 实例:轻量级 http 服务器 Tinyhttpd 部署

    Flexus 云服务器 X 实例 是华为云推出的高性能、高可靠性的云服务器产品,它专为满足企业级用户对计算资源的严格要求而设计。本篇文章通过部署 轻量级 http 服务器 Tinyhttpd
    的头像 发表于 01-07 16:59 912次阅读
    云服务器 Flexus X 实例:<b class='flag-5'>轻量级</b> http 服务器 Tinyhttpd 部署

    AKI跨语言调用库神助攻C/C++代码迁移至HarmonyOS NEXT

    /C++代码快速迁移至HarmonyOS NEXT。凭借卓越的兼容性,AKI已成为厂商与开发者打造鸿蒙原生应用过程中广泛使用的跨语言调用解决方案。 AKI是款专为鸿蒙原生开发设计的
    发表于 01-02 17:08

    华为云 Flexus X 实例部署安装 HivisionIDPhoto 轻量级的 AI 证件照制作算法

    背景 最近有开源项目非常火,就是 HivisionIDPhotos 轻量级的 AI 证件照制作算法 github 仓库 https:
    的头像 发表于 12-25 17:08 1735次阅读
    华为云 Flexus X 实例部署安装 HivisionIDPhoto <b class='flag-5'>一</b><b class='flag-5'>个</b><b class='flag-5'>轻量级</b>的 AI 证件照制作算法

    HarmonyOS Web开发性能优化指导

    20ms收益。 | 低 | - | ArrayBuffer格式的数据传输。 | (二)预启动Web渲染进程 原理介绍 此方案适用于Web页面启动场景。开发者需额外创建
    发表于 12-06 08:41