1. 程式人生 > >剛學會 C++ 的小白用這個開源框架,做個 RPC 服務要多久?

剛學會 C++ 的小白用這個開源框架,做個 RPC 服務要多久?

> 本文適合有 C++ 基礎的朋友 ![](https://img2020.cnblogs.com/blog/759200/202102/759200-20210221091640067-1483477160.jpg)

本文作者:HelloGitHub-Anthony

HelloGitHub 推出的[《講解開源專案》](https://github.com/HelloGitHub-Team/Article)系列,本期介紹基於 C++ 的 RPC 開源框架——**rest_rpc**,一個讓小白也可以快速(10 分鐘)開發 RPC 服務的框架。 > 專案地址:https://github.com/qicosmos/rest_rpc rest_rpc 是一個高效能、易用、跨平臺、header only 的 C++11 RPC 庫,它的目標是讓 TCP 通訊變得非常簡單易用,即使不懂網路通訊的人也可以直接使用它、快速上手。同時使用者只需要關注自己的業務邏輯即可。 ![](https://img2020.cnblogs.com/blog/759200/202102/759200-20210221091731266-1347966475.png) 簡而言之 rest_rpc 能讓您能在**沒有任何網路程式設計相關知識的情況下通過幾行程式碼快速編寫屬於自己的網路程式**,而且使用非常方便,是入門網路程式設計及 RPC 框架的不二之選! ## 一、預備知識 ### 1.1 什麼是 RPC RPC 是 Remote Procedure Call 即 遠端過程呼叫 的縮寫。 ### 1.2 RPC 有什麼用 舉個例子來講,有兩臺伺服器 A、B 現在 A 上的程式想要遠端呼叫 B 上應用提供的函式/方法,就需要通過網路來傳輸呼叫所需的訊息。 但是訊息的網路傳輸涉及很多東西,例如: - 客戶端和服務端間 TCP 連線的建立、維持和斷開 - 訊息的序列化、編組 - 訊息的網路傳輸 - 訊息的反序列化 - 等等 RPC 的作用就是遮蔽網路相關操作,**讓不在一個記憶體空間,甚至不在一個機器內的程式可以像呼叫普通函式一樣被呼叫。** ### 1.3 rest_rpc 優點 rest_rpc 有很多的優點: - 使用簡單 - 支援訂閱模式 - 允許 `future` 和 `callback` 兩種非同步呼叫介面,滿足不同人群愛好 ## 二、快速開始 `rest_rpc` 依賴 `Boost` 在使用之前應正確安裝 `Boost`. ### 2.1 安裝 通過 `git clone` 命令將專案下載到本地: ```shell git clone https://github.com/qicosmos/rest_rpc ``` ### 2.2 目錄結構 rest_rpc 專案根目錄中檔案及其意義如表所示: | 檔名 | 作用 | | -------- | ------------------------------------------- | | doc | rest_rpc 效能測試報告 | | examples | rest_rpc 例子,包含 client 和 server 兩部分 | | include | rest_rpc 框架標頭檔案 | | third | msgpack 支援庫,用於用序列化和反序列化訊息 | ### 2.3 執行例程 rest_rpc 例程為 visual studio 工程,客戶端和服務端例程分別儲存在 `examples/client` 和 `examples/server` 中,直接使用 visual studio 開啟 `basic_client.vcxproj` 或 `basic_server.vcxproj` 後直接編譯即可,官方例程執行效果如圖: ![](https://img2020.cnblogs.com/blog/759200/202102/759200-20210221091740583-1160118015.png) > **注意**:專案需要 `Boost/asio` 支援,如未安裝 `Boost` 需要先正確安裝 `Boost`後將 `Boost` 新增到工程。 **工程中新增 `Boost` 方法如下:** 1. 開啟工程後點擊選單欄中的 `專案`→`屬性`(快捷鍵 `Alt`+`F7`) 2. 選擇左邊的 `VC++ 目錄` 選項,在右邊的 `包含目錄` 和 `庫目錄` 中新增 `Boost` 的 `根目錄` 和 `依賴庫` 後儲存 我使用的為 `Boost 1.75` 安裝目錄為 `D:\devPack\boost_1_75_0`,配置過程如圖所示: ![](https://img2020.cnblogs.com/blog/759200/202102/759200-20210221091747439-19864602.png) ![](https://img2020.cnblogs.com/blog/759200/202102/759200-20210221091753532-879548605.png) ## 三、詳細教程 ### 3.1 寫在前面 無論 `服務端` 還是 `客戶端` 都只用包含 `include/rest_rpc.hpp` 這一個檔案即可。 所有**示例程式碼都是用瞭如下內容作為框架**: ```cpp #