文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

一个轻量级、高性能的 C++ Web 框架

2024-12-02 18:30

关注

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

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

1

Oat++ 介绍

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

其主要特性有:

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

 

2

编译 Oat++

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

环境要求

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

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

  1. $ sudo apt install git 
  2.  
  3. $ sudo apt install cmake 
  4.  
  5. $ sudo apt install build-essential 

编译安装

下载 Oat++ 源码:

  1. $ git clone https://github.com/oatpp/oatpp.git 

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

  1. $ cd oatpp/ 
  2.  
  3. $ mkdir build && cd build 
  4.  
  5. $ cmake .. 
  6.  
  7. $ sudo make && sudo make install 

3

示例程序

 

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

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

  1. cmake_minimum_required(VERSION 3.1
  2.  
  3. project(helloworld) 
  4.  
  5. set(CMAKE_CXX_STANDARD 11
  6.  
  7. set(SOURCE_FILES main.cpp handler.h) 
  8.  
  9. # 查找 oatpp 依赖 
  10.  
  11. find_package(oatpp REQUIRED) 
  12.  
  13. add_executable(${PROJECT_NAME} ${SOURCE_FILES}) 
  14.  
  15. # 将目标文件与库文件进行链接 
  16.  
  17. target_link_libraries(${PROJECT_NAME} oatpp::oatpp) 

默认情况下,Oat++ 会对客户端请求响应 404,除此之外什么都不做。

若要添加自定义响应,必须实现 HttpRequestHandler:

  1. // handler.h 
  2.  
  3. #ifndef HANDLER_H 
  4.  
  5. #define HANDLER_H 
  6.  
  7. #include "oatpp/web/server/HttpRequestHandler.hpp" 
  8.  
  9. #define O_UNUSED(x) (void)x; 
  10.  
  11. // 自定义请求处理程序 
  12.  
  13. class Handler : public oatpp::web::server::HttpRequestHandler 
  14.  
  15.  
  16. public
  17.  
  18. // 处理传入的请求,并返回响应 
  19.  
  20. std::shared_ptr handle(const std::shared_ptr& request) override { 
  21.  
  22. O_UNUSED(request); 
  23.  
  24. return ResponseFactory::createResponse(Status::CODE_200, "Hello, World!"); 
  25.  
  26.  
  27. }; 
  28.  
  29. #endif // HANDLER_H 

有了处理程序之后,需要通过 Router 将请求路由到它:

  1. // main.cpp 
  2.  
  3. #include "oatpp/web/server/HttpConnectionHandler.hpp" 
  4.  
  5. #include "oatpp/network/tcp/server/ConnectionProvider.hpp" 
  6.  
  7. #include "oatpp/network/Server.hpp" 
  8.  
  9. #include "handler.h" 
  10.  
  11. void run() 
  12.  
  13.  
  14. // 为 HTTP 请求创建路由器 
  15.  
  16. auto router = oatpp::web::server::HttpRouter::createShared(); 
  17.  
  18. // 路由 GET - "/hello" 请求到处理程序 
  19.  
  20. router->route("GET""/hello", std::make_shared()); 
  21.  
  22. // 创建 HTTP 连接处理程序 
  23.  
  24. auto connectionHandler = oatpp::web::server::HttpConnectionHandler::createShared(router); 
  25.  
  26. // 创建 TCP 连接提供者 
  27.  
  28. auto connectionProvider = oatpp::network::tcp::server::ConnectionProvider::createShared({"localhost"8000, oatpp::network::Address::IP_4}); 
  29.  
  30. // 创建服务器,它接受提供的 TCP 连接并将其传递给 HTTP 连接处理程序 
  31.  
  32. oatpp::network::Server server(connectionProvider, connectionHandler); 
  33.  
  34. // 打印服务器端口 
  35.  
  36. OATPP_LOGI("MyApp""Server running on port %s", connectionProvider->getProperty("port").getData()); 
  37.  
  38. // 运行服务器 
  39.  
  40. server.run(); 
  41.  
  42.  
  43. int main() 
  44.  
  45.  
  46. // 初始化 oatpp 环境 
  47.  
  48. oatpp::base::Environment::init(); 
  49.  
  50. // 运行应用 
  51.  
  52. run(); 
  53.  
  54. // 销毁 oatpp 环境 
  55.  
  56. oatpp::base::Environment::destroy(); 
  57.  
  58. return 0
  59.  

 

4

请求验证

 

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

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

  1. $ curl http://127.0.0.1:8000/hello 
  2.  
  3. Hello, World! 

 

 

来源:高效程序员内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯