<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          GitHub 開源推薦 | 一個輕量級、高性能的 C++ Web 框架

          共 5050字,需瀏覽 11分鐘

           ·

          2021-09-23 07:22

          星標(biāo)/置頂 公眾號??硬核文章第一時間送達(dá)

           Github 開源推薦




          專注分享 GitHub 上有趣、好玩的開源項目,以幫助大家提高編程技巧,找到編程樂趣。

          如果你對開源感興趣,想和大家分享一些優(yōu)質(zhì)項目,隨時歡迎投稿(微信號:iwaleon)。


          說起 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++ 的很不錯,輕量、跨平臺、高性能、完全零依賴,非常值得學(xué)習(xí)!



          1

          Oat++ 介紹


          要深入了解 Oat++離不開這幾個網(wǎng)址:


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

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

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


          其主要特性有:


          • 隨處運(yùn)行

            Oat++ 沒有任何依賴性,可以很容易地移植到各種支持的平臺上(Linux、MacOS、Windows)。
          • 構(gòu)建健壯的api

            使用 Oat++ Simple-API,構(gòu)建靈活而健壯的 API 既簡單又有趣。
          • 處理 500 萬個連接

            使用 Oat++ Async-API,可以在單個服務(wù)器上處理超過 500 萬個并發(fā)連接。
          • 訪問數(shù)據(jù)庫

            Oat++ ORM 提供了一種簡單而統(tǒng)一的方式來訪問數(shù)據(jù)庫
          • 保持代碼一致

            Oat++ 在整個代碼庫中依靠對象映射來確保 API 和數(shù)據(jù)模型的一致性
          • 生成 API 文檔

            使用 Swagger-UI 和 OpenAPI 3.0.0 自動記錄 endpoints


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


          2

          編譯 Oat++


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




          環(huán)境要求


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


          • Git

          • 編譯器支持的 C++ 版本 >= 11

          • Make

          • CMake 版本 >= 3.1


          如果沒有的話,按照下述步驟安裝,以 Ubuntu 為例:


          $ sudo apt install git
          $ sudo apt install cmake
          $ sudo apt install build-essential


          編譯安裝


          下載 Oat++ 源碼:


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


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


          $ cd oatpp/
          $ mkdir build && cd build
          $ cmake ..
          $ sudo make && sudo make install


          3

          示例程序


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


          創(chuàng)建一個 CMake 項目,CMakeLists.txt 配置如下:


          cmake_minimum_required(VERSION 3.1)
          project(helloworld)

          set(CMAKE_CXX_STANDARD 11)
          set(SOURCE_FILES main.cpp handler.h)

          # 查找 oatpp 依賴
          find_package(oatpp REQUIRED)

          add_executable(${PROJECT_NAME} ${SOURCE_FILES})

          # 將目標(biāo)文件與庫文件進(jìn)行鏈接
          target_link_libraries(${PROJECT_NAME} oatpp::oatpp)

          默認(rèn)情況下,Oat++ 會對客戶端請求響應(yīng) 404,除此之外什么都不做。


          若要添加自定義響應(yīng),必須實現(xiàn) HttpRequestHandler:


          // handler.h
          #ifndef HANDLER_H
          #define HANDLER_H

          #include "oatpp/web/server/HttpRequestHandler.hpp"

          #define O_UNUSED(x) (void)x;

          // 自定義請求處理程序
          class Handler : public oatpp::web::server::HttpRequestHandler
          {
          public:
              // 處理傳入的請求,并返回響應(yīng)
              std::shared_ptr<OutgoingResponse> handle(const std::shared_ptr<IncomingRequest>& request) override {
                  O_UNUSED(request);

                  return ResponseFactory::createResponse(Status::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"

          void run()
          {
              // 為 HTTP 請求創(chuàng)建路由器
              auto router = oatpp::web::server::HttpRouter::createShared();

              // 路由 GET - "/hello" 請求到處理程序
              router->route("GET""/hello"std::make_shared<Handler>());

              // 創(chuàng)建 HTTP 連接處理程序
              auto connectionHandler = oatpp::web::server::HttpConnectionHandler::createShared(router);

              // 創(chuàng)建 TCP 連接提供者
              auto connectionProvider = oatpp::network::tcp::server::ConnectionProvider::createShared({"localhost"8000, oatpp::network::Address::IP_4});

              // 創(chuàng)建服務(wù)器,它接受提供的 TCP 連接并將其傳遞給 HTTP 連接處理程序
              oatpp::network::Server server(connectionProvider, connectionHandler);

              // 打印服務(wù)器端口
              OATPP_LOGI("MyApp""Server running on port %s", connectionProvider->getProperty("port").getData());

              // 運(yùn)行服務(wù)器
              server.run();
          }

          int main()
          {
              // 初始化 oatpp 環(huán)境
              oatpp::base::Environment::init();

              // 運(yùn)行應(yīng)用
              run();

              // 銷毀 oatpp 環(huán)境
              oatpp::base::Environment::destroy();

              return 0;
          }


          4

          請求驗證


          運(yùn)行程序,在瀏覽器中訪問 http://localhost:8000/hello,就會顯示“Hello, World!”信息了:



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


          $ curl http://127.0.0.1:8000/hello
          Hello, World!

          感興趣?還在等什么,趕緊關(guān)注吧,后面的內(nèi)容更加精彩!


          往期推薦




          專輯 | 趣味設(shè)計模式
          專輯 | 音視頻開發(fā)
          專輯 | C++ 進(jìn)階
          專輯 | 超硬核 Qt
          專輯 | 玩轉(zhuǎn) Linux
          專輯 | GitHub 開源推薦
          專輯 | 程序人生


          關(guān)注公眾「高效程序員」??一起優(yōu)秀!

          回復(fù) “入群” 進(jìn)技術(shù)交流群,回復(fù) “1024” 獲取海量學(xué)習(xí)資源。
          瀏覽 67
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  奇米狠狠av | 青青草视频在线免费观看 | 天天操天天射天天操 | 日本三级网站 | 一级黄色录相 |