Thrift前端上手實例
- 2019 年 12 月 4 日
- 筆記
項目介紹
這個項目用來幫助那些對thrift感興趣的前端們上手thrift, 你可以把它認為是一個簡易的使用案例或是指南, 畢竟thrift的官方文檔真的很簡單…
為什麼使用Thrift
Thrift是一種介面描述語言和二進位通訊協議, 可以用來進行服務端與服務端的通訊。 與http相比他有很多優點:
- 跨語言,自動生成不同語言的介面程式碼,這在開發中用處很大,可以使你在聯調之前就確保傳輸的參數類型和欄位沒有問題,大大減少bug出現率。
- 與HTTP相比更加緊湊,但同時可擴展性也很強,支援加密、非阻塞、非同步等功能。
- 數據傳輸效率高,負載低,支援多種序列化技術。
一些劣勢:
- 介面程式碼根據IDL自動生成,當數據結構變化時,需重新編輯IDL文件,生成程式碼。( 這一點可以通過寫腳本解決這個問題 )
- 社區和技術文檔很不全面。
以上都是一些在哪都能查得到的優劣對比…
其實當前端業務越來越複雜, 後端所提供的服務不管是數量還是種類都越來越多, RPC協議的重要性才會凸顯出來, 因為一個前端應用需要調用各種服務, 需要一個中間層來做不同服務的整合, 中間層與真正後端的通訊使用像Thrift這樣的RPC協議就再合適不過了。 其實項目架構中的圖主要就解釋了這一點。( 如果有讀者對這個不是很了解可以閱讀一下我的這篇 日記 )
注意 : 這個項目主要是為前端們提供上手幫助而非細節講解。
項目架構
以我對thrift一些淺薄的理解,它的應用整體架構因該是如下圖所示的:

主要的文件結構
-| |- client // 前端 | |- middle // 中間層 | |- server // 真正的後端 | |- thrift -| // 存放與thrift相關文件的文件夾 | |- gen-nodejs // 存放.js文件的文件夾 | |- .thrift // 存放.thrift文件的文件夾 // 注意: 這個項目使用node作為服務端的開發語言, 部分程式碼衍生自官網的實例, 但是它比官網的程式碼更加完整, 可以讓你了解thrift的完整使用流程。
將會被用到的前端框架或前端庫以及使用原因:
- 客戶端 : vue 使用原因 : 嘗試一下而已,但是使用vue-cli構建項目真的很方便,對vue不熟悉的瀆職只需關注 @client/src/App.vue 中的程式碼即可;
- 中間層 : koa做router處理, thrift連接真正的後端 使用原因 : 因為它是一個真的很輕量的nodejs庫,作為demo真的是再適合不過了;
- 服務端 : thrift 使用原因 : 通常的,這裡會使用java等一些穩定高效的後端語言,但是為了方便前端們的閱讀也為了方便編寫,這裡還是使用node.
如何使用
- 首先你需要通過
npm run server
啟動服務端的服務; - 接下來你需要通過
npm run middle
啟動中間層的服務; - 最後你需要
cd client
進入client文件夾,並執行npm run dev
來啟動客戶端; - 當你在客戶端出發事件,你將看到從服務端傳回的數據,追蹤數據的流向,你將明白thrift的使用方式。
數據流向圖:

最後
文章內容是個人的一些理解,如果閱讀的同學覺得有問題可以及時的與我溝通。