C#使用Thrift作為RPC框架入門(三)之三層架構

楊凱2020發表於2021-11-27

前言

  這是我們講解Thrift框架的第三篇文章,前兩篇我們講了Thrift作為RPC框架的基本用法以及架構的設計。為了我們更好的使用和理解Thrift框架,接下來,我們將來學習一下Thrift框架提供的名稱空間下的類

名稱空間

  Thrift一共給我們提供了5個名稱空間,看下圖

 

先講**Transport**名稱空間下的類,這個名稱空間主要是Thrift框架幫我們封裝的一些在不同應用場景下的傳輸層的類。

Transport--傳輸層

我們先看下這個名稱空間下的類,如下圖:

 

在這些類中,按用途可以分為兩類:

+ 客戶端使用的類
  • THttpClient

  • TNamedPipeClientTransport

  • TSocket

  • TTLSSocket

+ 伺服器端使用的類
  • TNamedPipeServerTransport

  • TServerSocket

  • TTLSServerSocket

按照傳輸協議可以分為三類:

+ TCP協議
  • TSocket

  • TTLSSocket

  • TServerSocket

  • TTLSServerSocket

+ NamedPipe命名管道
  • TNamedPipeClientTransport

  • TNamedPipeServerTransport

+ Http協議
  • THttpClient

我們可以看到上面一些分類並沒有包含所有的該**Transport**名稱空間下的所有類,那是因為這些類是一種包裝類,它用於包裝上述不同協議、不同用途下的傳輸層的類,它包含一下這些類:

  • TBufferedTransport

  • TFramedTransport


類的繼承關係

  分析該名稱空間加下的類,我們可以發現除了一些幫助類外,他們都繼承自一些兩個介面:

 

  • TServerTransport
  • TTransport

我們在實際使用過程中,我們可以清晰的通過這兩組介面的子類來區分它們的用途。

 協議層 Protocol

so,我們先來看一下大致的類庫結構:

 

在協議層中我們經常使用到這些類代表的協議

  •  TBinaryProtocol 它是一種二進位制格式的傳輸協議,也是框架預設使用的協議

  •  TCompactProtocol 它是一種緊湊型的二進位制格式傳輸協議

  •  TJSONProtocol 它將資料封裝成Json格式進行傳輸,這種格式壓縮率低,我們一般使用上面兩組格式

Thrift提供的傳輸協議一般是夠用的,如果你需要特殊的格式協議,你可以繼承TProtocol抽象類

伺服器層 Server

看名稱空間型別結構:

該名稱空間下的型別較少,但它確實撐起Thrift框架的半壁江山,接下來我們來分析一下這個名稱空間僅有的三個非抽象類(還有一個介面,提供服務類處理客戶端訊息前的通知,通過伺服器類的set方法進行裝載):

  • TSimpleServer 阻塞式伺服器類,即處理一個客戶端請求時,不會再接收其他客戶端的連結請求,直到上一個客戶端處理完成

  • TThreadedServer 非阻塞式伺服器類,它提供了一個迴圈監聽客戶端請求,並將請求客戶端存放到一個客戶端集合中,然後通過另一個執行緒迴圈提取請求客戶端,最後利用自定義的執行緒池進行處理請求

  • TThreadPoolServer 非阻塞式伺服器類,和上個類一樣,唯一的區別是它利用了. net runtime提供的執行緒池進行處理客戶端請求

總結

Thrift三個重要層面的類庫簡單說明就到此結束了,接下來,我將說明Thrift在實際應用場景中我們應該注意問題

相關文章