項目介紹
這個項目用來幫助那些對thrift感興趣的前端們上手thrift,
你可以把它認(rèn)為是一個簡易的使用案例或是指南,
畢竟thrift的官方文檔真的很簡單...
為什么使用Thrift
Thrift是一種接口描述語言和二進(jìn)制通訊協(xié)議,
可以用來進(jìn)行服務(wù)端與服務(wù)端的通信。
與http相比他有很多優(yōu)點:
- 跨語言,自動生成不同語言的接口代碼,這在開發(fā)中用處很大,可以使你在聯(lián)調(diào)之前就確保傳輸?shù)膮?shù)類型和字段沒有問題,大大減少bug出現(xiàn)率。
- 與HTTP相比更加緊湊,但同時可擴展性也很強,支持加密、非阻塞、異步等功能。
- 數(shù)據(jù)傳輸效率高,負(fù)載低,支持多種序列化技術(shù)。
一些劣勢:
- 接口代碼根據(jù)IDL自動生成,當(dāng)數(shù)據(jù)結(jié)構(gòu)變化時,需重新編輯IDL文件,生成代碼。( 這一點可以通過寫腳本解決這個問題 )
- 社區(qū)和技術(shù)文檔很不全面。
以上都是一些在哪都能查得到的優(yōu)劣對比...
其實當(dāng)前端業(yè)務(wù)越來越復(fù)雜,
后端所提供的服務(wù)不管是數(shù)量還是種類都越來越多,
RPC協(xié)議的重要性才會凸顯出來,
因為一個前端應(yīng)用需要調(diào)用各種服務(wù),
需要一個中間層來做不同服務(wù)的整合,
中間層與真正后端的通信使用像Thrift這樣的RPC協(xié)議就再合適不過了。
其實項目架構(gòu)中的圖主要就解釋了這一點。( 如果有讀者對這個不是很了解可以閱讀一下我的這篇 日記 )
注意 : 這個項目主要是為前端們提供上手幫助而非細(xì)節(jié)講解。
項目架構(gòu)
以我對thrift一些淺薄的理解,它的應(yīng)用整體架構(gòu)因該是如下圖所示的:
主要的文件結(jié)構(gòu)
-|
|- client // 前端
|
|- middle // 中間層
|
|- server // 真正的后端
|
|- thrift -| // 存放與thrift相關(guān)文件的文件夾
|
|- gen-nodejs // 存放.js文件的文件夾
|
|- .thrift // 存放.thrift文件的文件夾
// 注意:
這個項目使用node作為服務(wù)端的開發(fā)語言,
部分代碼衍生自官網(wǎng)的實例,
但是它比官網(wǎng)的代碼更加完整,
可以讓你了解thrift的完整使用流程。
將會被用到的前端框架或前端庫以及使用原因:
客戶端 : vue
使用原因 : 嘗試一下而已,但是使用vue-cli構(gòu)建項目真的很方便,對vue不熟悉的瀆職只需關(guān)注 @client/src/App.vue 中的代碼即可;中間層 : koa做router處理, thrift連接真正的后端
使用原因 : 因為它是一個真的很輕量的nodejs庫,作為demo真的是再適合不過了;服務(wù)端 : thrift
使用原因 : 通常的,這里會使用java等一些穩(wěn)定高效的后端語言,但是為了方便前端們的閱讀也為了方便編寫,這里還是使用node.
如何使用
- 首先你需要通過
npm run server
啟動服務(wù)端的服務(wù); - 接下來你需要通過
npm run middle
啟動中間層的服務(wù); - 最后你需要
cd client
進(jìn)入client文件夾,并執(zhí)行npm run dev
來啟動客戶端; - 當(dāng)你在客戶端出發(fā)事件,你將看到從服務(wù)端傳回的數(shù)據(jù),追蹤數(shù)據(jù)的流向,你將明白thrift的使用方式。
數(shù)據(jù)流向圖:
最后
文章內(nèi)容是個人的一些理解,如果閱讀的同學(xué)覺得有問題可以及時的與我溝通。