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

    文章

    1238

    浏览量

    68492
  • C++
    C++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72903

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

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

收藏 人收藏

    评论

    相关推荐

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

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

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

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

    轻量级数据库有哪些类型

    轻量级数据库是指具有小巧、灵活、高效的特点,适用于小规模项目和嵌入式设备的数据库管理系统。下面是对轻量级数据库类型的详细介绍,包括关系型数据库、非关系型数据库、面向对象数据库等等。 关系型数据库
    的头像 发表于 12-20 11:29 613次阅读

    Mara-pipelines:轻量级的数据转换框架

    Mara-pipelines 是一个轻量级的数据转换框架,具有透明和低复杂性的特点。其他特点如下: 基于非常简单的Python代码就能完成流水线开发。 使用 PostgreSQL 作为数据处理引擎
    的头像 发表于 10-30 10:47 274次阅读
    Mara-pipelines:<b class='flag-5'>轻量级</b>的数据转换框架

    华为云云耀云服务器 L 实例:轻量级应用服务器也能有高性能,助力业务快速发展

    飞腾。 简单来说,华为云云耀云服务器 L 实例是一款基于云计算技术的虚拟服务器实例,最为显著的就是拥有高性能轻量级的特性。首先,其智能不卡顿的特点使其在性能方面领先于同类产品,性能
    的头像 发表于 09-13 21:15 314次阅读
    华为云云耀云服务器 L 实例:<b class='flag-5'>轻量级</b>应用服务器也能有<b class='flag-5'>高性能</b>,助力业务快速发展

    轻量级Java表达式引擎aviator的基本使用

    aviator本来是一个轻量级高性能的基于JVM的表达式引擎。不过从5.0.0版本开始,aviator升级成为了aviatorScript,成为一个高性能轻量级寄宿于 JVM (包
    发表于 09-13 09:42 371次阅读

    高性能轻量级应用服务器,华为云云耀云服务器 L 实例助力业务快速发展

    随着互联网的快速发展,越来越多的企业和个人开始将业务迁移到云端。云计算技术的出现为用户提供了更加灵活、高效的解决方案。在众多云计算服务提供商中,华为云云耀云服务器 L 实例以其高性能轻量级的特点
    的头像 发表于 09-11 11:33 365次阅读
    <b class='flag-5'>高性能</b><b class='flag-5'>轻量级</b>应用服务器,华为云云耀云服务器 L 实例助力业务快速发展

    新知同享 | Web 开发性能提升,优化体验

    现场一览 Web 开发不断发展,每年都带来性能提升和功能迭代,开启丰富多样的新体验,让开发者能够获享高级计算功能。谷歌提供工具和解决方案,帮助开发
    的头像 发表于 09-09 19:10 502次阅读

    一个面向嵌入式系统的轻量级框架

    mr-library 是一个面向嵌入式系统的轻量级框架,提供统一的底层驱动设备模型以及基础服务功能,具有模块化设计、可配置性和扩展性的特点, 可帮助开发者快速构建嵌入式应用程序。
    发表于 09-01 12:22 307次阅读

    轻量级数据库有哪些

    轻量级数据库有哪些 随着互联网和物联网等新一代信息技术的广泛应用,数据库系统也变得越来越重要。人们对于数据库数据库的可靠性、安全性和性能等要求也越来越高。与传统的关系型数据库系统相比,轻量级
    的头像 发表于 08-28 16:41 4345次阅读

    LSI存储机构轻量级监视器用户指南

    电子发烧友网站提供《LSI存储机构轻量级监视器用户指南.pdf》资料免费下载
    发表于 08-24 14:25 0次下载
    LSI存储机构<b class='flag-5'>轻量级</b>监视器用户指南

    如何为原生C++开发设置Android Studio

    。 为了进步提高性能,您需要程序集使用程序集代码。 但是,使用ARM Neon内部函数可以避免编写汇编函数的复杂性。 相反,您只需要用C/C++编程并调用arm_neon.h头文件中
    发表于 08-17 08:28

    Arm C/C++编译器22.1版开发人员和参考指南

    提供帮助您使用ARM®编译器Linux版的ARM®C/C++编译器组件的信息。 ARM®C/C++编译器是款自动矢量化的Linux空间
    发表于 08-11 07:46

    Arm C/C++编译器开发人员和参考指南

    提供帮助您使用Arm®编译器Linux版的Arm®C/C++编译器组件的信息。Arm®C/C++编译器是款自动向量化的Linux空间
    发表于 08-10 06:17

    如何为Arm编译Cc++代码

    C++源代码翻译成机器代码的编译器。 •将汇编语言源代码翻译成机器代码的汇编程序。 •链接器,用于将多个机器代码模块组合成可执行文
    发表于 08-02 17:28