Thrift 源碼學習一
Thrift 客戶端與服務端的交互圖
源碼結構
-
傳輸層 TTransport:
-
TTransport:客戶端傳輸層抽象基礎類,read、write、flush、close 等方法
-
TSocket 與 TNonBlockingSocket:分別是基於 BIO 和 NIO 客戶端傳輸類
-
TServerSocket 與 TNonBlockingServerSocket:分別是基於 BIO 和 NIO 服務端傳輸類
-
TZlibTransport:
-
TSaslClientTransport 與 TSaslServerTransport:提供 SSL 校驗
-
-
協議層 Protocol:
-
TBinaryProtocol:二進制流傳輸協議類,把各類型轉換成 byte 數組,交給 TTransport 傳輸
-
TCompactProtocol:使用 Variable-Length Quantity(VLQ)編碼對數據進行壓縮(壓縮方法二進制協議類,將 Integer 按 ZigZag 壓縮)
-
TTupleProtocol:繼承自 TCompactProtocol,Struct 使用時更省空間
-
TJSONProtocol:JSON 格式協議類,將數據封裝成 JSON 格式,再轉成 byte 數組交給傳輸層
-
TSimpleJSONProtocol:JSON 格式協議類,但只支持寫的功能
-
-
處理層 Processor:
-
TProcessor:基礎接口,process(TProtocol in, TProtocol out)
-
TBaseProcessor:基礎抽象類,持有 processMap 對象,key 為方法名,value 為方法
-
Processor:由聲明的 IDL 生成,實現 TProcessor 接口並繼承了 TBaseProcessor 類
-
TAsyncProcessor:異步處理接口
-
TBaseAsyncProcessor:異步處理抽象類
-
AsyncProcessor:由聲明的 IDL 生成,實現 TAsyncProcessor 接口並繼承 TAsyncProcessor 類
-
-
服務層 Server:
-
TServer:基礎抽象類,類似一個容器,持有 TProcessor、TTransport、TProtocol 的工廠對象,提供 server() 方法,用於啟動服務,stop() 用於停止服務
-
TSimpleServer:單線程阻塞式服務
-
TNonblockingServer:支持非阻塞單線程服務模型,基於 NIO 的 select 實現
-
TThreadPoolServer:專門的線程接受請求並交給線程池處理,阻塞式線程池模型
-
Thrift 源碼學習一