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的使用方式。

數據流向圖:

最後

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