前言
這是我們講解Thrift框架的第三篇文章,前兩篇我們講了Thrift作為RPC框架的基本用法以及架構的設計。為了我們更好的使用和理解Thrift框架,接下來,我們將來學習一下Thrift框架提供的名稱空間下的類。
名稱空間
Thrift一共給我們提供了5個名稱空間,看下圖
先講**Transport**名稱空間下的類,這個名稱空間主要是Thrift框架幫我們封裝的一些在不同應用場景下的傳輸層的類。
Transport--傳輸層
我們先看下這個名稱空間下的類,如下圖:
在這些類中,按用途可以分為兩類:
-
THttpClient
-
TNamedPipeClientTransport
-
TSocket
-
TTLSSocket
-
TNamedPipeServerTransport
-
TServerSocket
-
TTLSServerSocket
按照傳輸協議可以分為三類:
-
TSocket
-
TTLSSocket
-
TServerSocket
-
TTLSServerSocket
-
TNamedPipeClientTransport
-
TNamedPipeServerTransport
-
THttpClient
我們可以看到上面一些分類並沒有包含所有的該**Transport**名稱空間下的所有類,那是因為這些類是一種包裝類,它用於包裝上述不同協議、不同用途下的傳輸層的類,它包含一下這些類:
-
TBufferedTransport
-
TFramedTransport
類的繼承關係
分析該名稱空間加下的類,我們可以發現除了一些幫助類外,他們都繼承自一些兩個介面:
- TServerTransport
- TTransport
我們在實際使用過程中,我們可以清晰的通過這兩組介面的子類來區分它們的用途。
協議層 Protocol
so,我們先來看一下大致的類庫結構:
在協議層中我們經常使用到這些類代表的協議
-
TBinaryProtocol 它是一種二進位制格式的傳輸協議,也是框架預設使用的協議
-
TCompactProtocol 它是一種緊湊型的二進位制格式傳輸協議
-
TJSONProtocol 它將資料封裝成Json格式進行傳輸,這種格式壓縮率低,我們一般使用上面兩組格式
Thrift提供的傳輸協議一般是夠用的,如果你需要特殊的格式協議,你可以繼承TProtocol抽象類
伺服器層 Server
看名稱空間型別結構:
該名稱空間下的型別較少,但它確實撐起Thrift框架的半壁江山,接下來我們來分析一下這個名稱空間僅有的三個非抽象類(還有一個介面,提供服務類處理客戶端訊息前的通知,通過伺服器類的set方法進行裝載):
-
TSimpleServer 阻塞式伺服器類,即處理一個客戶端請求時,不會再接收其他客戶端的連結請求,直到上一個客戶端處理完成
-
TThreadedServer 非阻塞式伺服器類,它提供了一個迴圈監聽客戶端請求,並將請求客戶端存放到一個客戶端集合中,然後通過另一個執行緒迴圈提取請求客戶端,最後利用自定義的執行緒池進行處理請求
-
TThreadPoolServer 非阻塞式伺服器類,和上個類一樣,唯一的區別是它利用了. net runtime提供的執行緒池進行處理客戶端請求
總結
Thrift三個重要層面的類庫簡單說明就到此結束了,接下來,我將說明Thrift在實際應用場景中我們應該注意問題