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

    文章

    1255

    浏览量

    69287
  • C++
    C++
    +关注

    关注

    21

    文章

    2097

    浏览量

    73452

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

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

收藏 人收藏

    评论

    相关推荐

    为了学习内核开发,大佬手搓了轻量级操作系统YiYiYa OS

    /kernel。 在移植适配的时候基本上和这些模块打交道比较多,同时单独库可以提高内核代码复用性,内核有专门的内核库,以便增加代码安全,减少出错。 01 支持荔枝派系列开发板,全志V3s,F1
    发表于 08-30 14:57

    基于Openharmony轻量级操作系统的分布式数据管理开发案例

    实验内容本例程演示如何在小凌派-RK2206开发板上使用OpenHarmony轻量级操作系统进行KvStore(即分布式数据管理)数据读写。例程:(1)创建两线程,
    的头像 发表于 08-07 08:23 806次阅读
    基于Openharmony<b class='flag-5'>轻量级</b>操作系统的分布式数据管理<b class='flag-5'>开发</b>案例

    深度详解嵌入式系统专用轻量级框架设计

    MR 框架是专为嵌入式系统设计的轻量级框架。充分考虑了嵌入式系统在资源和性能方面的需求。通过提供标准化的设备管理接口,极大简化了嵌入式应用开发的难度,帮助开发者快速构建嵌入式应用程序。
    发表于 04-27 02:32 894次阅读
    深度详解嵌入式系统专用<b class='flag-5'>轻量级</b>框架设计

    未来轻量级深度学习技术探索

    除了轻量级架构设计外,作者提到了可以应用于压缩给定架构的各种高效算法。例如,量化方法 旨在减少数据所需的存储空间,通常是通过用8位或16位数字代替32位浮点数,甚至使用二进制值表示数据。
    发表于 04-23 15:54 354次阅读
    未来<b class='flag-5'>轻量级</b>深度学习技术探索

    鸿蒙OS开发实例:【Native C++

    使用DevEco Studio创建Native C++应用。应用采用Native C++模板,实现使用NAPI调用C标准库的功能。使用
    的头像 发表于 04-14 11:43 2444次阅读
    鸿蒙OS<b class='flag-5'>开发</b>实例:【Native <b class='flag-5'>C++</b>】

    百度智能云推出全新轻量级大模型

    在近日举办的百度智能云千帆产品发布会上,三款全新的轻量级大模型——ERNIE Speed、ERNIE Lite以及ERNIE Tiny,引起了业界的广泛关注。相较于传统的千亿级别参数大模型,这些轻量级大模型在参数量上有了显著减少,为客户提供了更加灵活和经济高效的解决方案。
    的头像 发表于 03-22 10:28 602次阅读

    vb语言和c++语言的区别

    Microsoft开发种面向对象的事件驱动编程语言。它的设计目标是简化编程过程,让初学者也能快速上手。与之相比,C++语言是种通用的、面向对象的编程语言,其设计目标是提供
    的头像 发表于 02-01 10:20 1935次阅读

    C++在Linux内核开发中从争议到成熟

    Linux 内核邮件列表中一篇已有六年历史的老帖近日再次引发激烈讨论 —— 主题是建议将 Linux 内核的开发语言从 C 转换为更现代的 C++
    的头像 发表于 01-31 14:11 567次阅读
    <b class='flag-5'>C++</b>在Linux内核<b class='flag-5'>开发</b>中从争议到成熟

    web前端开发和前端开发的区别

    、CSS和JavaScript等技术来构建用户界面,实现用户与应用程序的交互。Web前端开发包括网页设计、网页编码、前端框架使用以及优化页面性能等任务。 前端开发
    的头像 发表于 01-18 09:54 3147次阅读

    C++简史:C++是如何开始的

    MISRA C++:2023,MISRA® C++ 标准的下一个版本,来了!为了帮助您做好准备,我们介绍了 Perforce 首席技术支持工程师 Frank van den Beuken 博士撰写
    的头像 发表于 01-11 09:00 512次阅读
    <b class='flag-5'>C++</b>简史:<b class='flag-5'>C++</b>是如何开始的

    轻量级数据库有哪些类型

    关系型数据库是目前最常见的数据库类型,它将数据以表的形式存储,并使用SQL语言进行数据的管理和查询。虽然关系型数据库通常较为庞大和复杂,但仍有轻量级的关系型数据库可供选用。例如SQLite,它是
    的头像 发表于 12-20 11:29 1150次阅读

    c++怎么开始编程

    C++种高级的、通用的编程语言,用于开发各种类型的应用程序。它是从C语言演变而来,也是种静态类型语言,可以在不同的平台上进行
    的头像 发表于 11-27 15:56 872次阅读

    Linux轻量级工具集合Busybox的特点和使用

    Busybox是开源的、轻量级的软件工具集合,旨在提供精简的Unix工具集,适用于嵌入式系统和资源受限的环境。它将许多常用的Unix
    的头像 发表于 11-10 09:50 1333次阅读

    高性能C++编程的核心要点

    也有助于降低能耗、减少散热问题,延长硬件使用寿命。 Linux环境下C++程序的特点 Linux操作系统具有开源、稳定、高效的特点,成为C++程序员的首选开发环境。在Linux环境下,C++
    的头像 发表于 11-09 11:29 647次阅读

    C++20无栈协程超轻量高性能异步库开发实战

    c++20出来有段时间了。其中一大功能就是终于支持协程了(c++作为行业大哥大级别的语言,居然到C++20才开始支持协程,我也是无力吐槽了
    的头像 发表于 11-09 10:20 1137次阅读