成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一個輕量級、高性能的 C++ Web 框架

開發(fā) 前端
說起 Web 開發(fā),大多數(shù)人會想到 Java、Python、Golang ... 因為它們的主流 Web 框架有很多,Java 有非常知名的 Spring 全家桶,Python 有大而全的 Django、小而精的 Flask、高性能的 Tornado,Golang 也有快速靈活的 Gin、Echo 等框架。

說起 Web 開發(fā),大多數(shù)人會想到 Java、Python、Golang ... 因為它們的主流 Web 框架有很多,Java 有非常知名的 Spring 全家桶,Python 有大而全的 Django、小而精的 Flask、高性能的 Tornado,Golang 也有快速靈活的 Gin、Echo 等框架。

相比之下,C/C++ 陣營則遜色不少。之前,我曾寫過一篇《C++ Web(HTTP)開發(fā) 10 大利器》,其中介紹了一些 C/C++ Web 框架。有一個名為 Oat++ 的很不錯,輕量、跨平臺、高性能、完全零依賴,非常值得學習!

1

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 萬個并發(fā)連接。
  • 訪問數(shù)據(jù)庫
  • Oat++ ORM 提供了一種簡單而統(tǒng)一的方式來訪問數(shù)據(jù)庫
  • 保持代碼一致
  • Oat++ 在整個代碼庫中依靠對象映射來確保 API 和數(shù)據(jù)模型的一致性
  • 生成 API 文檔
  • 使用 Swagger-UI 和 OpenAPI 3.0.0 自動記錄 endpoints

最吸引我的是 HTTP/HTTPS、文件上傳/下載、以及強大的 Swagger API 功能。

 

2

編譯 Oat++

進入 Oat++ 的 GitHub 頁面,你會發(fā)現(xiàn) Star 多達 4K+,貢獻者有 30 多個,且最近幾天還有代碼提交,所以不用擔心熱度和活躍度,這個框架一直有人在積極地維護。

環(huán)境要求

Oat++ 的編譯過程很簡單,只需要有基本的開發(fā)環(huán)境就行了:

  • Git
  • 編譯器支持的 C++ 版本 >= 11
  • Make
  • CMake 版本 >= 3.1

如果沒有的話,按照下述步驟安裝,以 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 

隨后,執(zhí)行編譯安裝四部曲:

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

3

示例程序

 

為了演示 Oat++,我們從最簡單的“Hello, World!”開始!

創(chuàng)建一個 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,除此之外什么都不做。

若要添加自定義響應,必須實現(xiàn) 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<OutgoingResponse> handle(const std::shared_ptr<IncomingRequest>& 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 請求創(chuàng)建路由器 
  15.  
  16. auto router = oatpp::web::server::HttpRouter::createShared(); 
  17.  
  18. // 路由 GET - "/hello" 請求到處理程序 
  19.  
  20. router->route("GET""/hello", std::make_shared<Handler>()); 
  21.  
  22. // 創(chuàng)建 HTTP 連接處理程序 
  23.  
  24. auto connectionHandler = oatpp::web::server::HttpConnectionHandler::createShared(router); 
  25.  
  26. // 創(chuàng)建 TCP 連接提供者 
  27.  
  28. auto connectionProvider = oatpp::network::tcp::server::ConnectionProvider::createShared({"localhost"8000, oatpp::network::Address::IP_4}); 
  29.  
  30. // 創(chuàng)建服務器,它接受提供的 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 環(huán)境 
  47.  
  48. oatpp::base::Environment::init(); 
  49.  
  50. // 運行應用 
  51.  
  52. run(); 
  53.  
  54. // 銷毀 oatpp 環(huán)境 
  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! 

 

 

責任編輯:張燕妮 來源: 高效程序員
相關推薦

2025-06-27 10:41:04

Redis數(shù)據(jù)庫集群

2025-01-26 15:44:29

2017-10-11 16:12:19

內存

2023-06-28 08:16:50

Autofac應用程序

2020-10-13 18:09:22

開發(fā)框架開源

2022-08-10 12:21:07

PythonWebBottle

2020-09-04 09:27:40

開源C++搜狗

2019-12-13 19:00:26

PekwmLinux桌面

2020-08-27 11:39:05

JavaRESTful Web編程語言

2023-06-13 13:38:00

FlaskPython

2023-12-12 13:50:00

代碼業(yè)務狀態(tài)

2022-06-06 22:23:26

Tina工具Markdown

2024-01-03 07:42:49

分割模型高性能

2025-06-26 01:27:00

2023-06-27 16:42:18

Tinygrad深度學習工具

2025-04-17 04:00:00

SQLite-WebSQLite數(shù)據(jù)庫

2021-01-05 08:35:24

GNU nanoVim編輯器

2024-06-07 10:34:28

Rust開發(fā)工具

2011-08-25 15:35:18

Lua游戲對象

2018-01-17 15:05:22

框架設計爬蟲Scrapy
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区三区不卡视频 | 97色在线视频 | 久久精品亚洲欧美日韩精品中文字幕 | 久久久久99 | 精品视频在线免费观看 | 波多野吉衣久久 | 国产日韩欧美 | 欧美aⅴ | 亚洲狠狠 | 香蕉一区 | 伊人超碰在线 | 少妇性l交大片免费一 | 高清一区二区 | 欧美日韩网站 | 日本精品在线播放 | 国产一区二区在线免费观看 | 日韩中文字幕在线播放 | 奇米av| 亚洲国产精久久久久久久 | av一级毛片| 精品美女在线观看 | 欧美黄在线观看 | 久久另类视频 | 超黄视频网站 | 久久久久九九九女人毛片 | 欧美精品福利 | 欧美精品99 | 久草在线青青草 | 成人精品久久 | 狠狠干五月天 | 国产精品不卡 | 欧美精品在线观看 | 嫩草视频入口 | 日韩三级在线观看 | 久久久免费少妇高潮毛片 | 欧洲国产精品视频 | 91精品国产91久久久久久最新 | 福利视频网站 | 亚洲一级av毛片 | 久久久久久国产免费视网址 | 91麻豆精品国产91久久久资源速度 |