1. 程式人生 > >Thrift 源碼學習一

Thrift 源碼學習一

交互圖 cat nload sim download 學習 pac ejs text

Thrift 客戶端與服務端的交互圖

技術分享圖片

源碼結構

技術分享圖片

  1. 傳輸層 TTransport:

    1. TTransport:客戶端傳輸層抽象基礎類,read、write、flush、close 等方法

    2. TSocket 與 TNonBlockingSocket:分別是基於 BIO 和 NIO 客戶端傳輸類

    3. TServerSocket 與 TNonBlockingServerSocket:分別是基於 BIO 和 NIO 服務端傳輸類

    4. TZlibTransport:

    5. TSaslClientTransport 與 TSaslServerTransport:提供 SSL 校驗

  2. 協議層 Protocol:

    1. TBinaryProtocol:二進制流傳輸協議類,把各類型轉換成 byte 數組,交給 TTransport 傳輸

    2. TCompactProtocol:使用 Variable-Length Quantity(VLQ)編碼對數據進行壓縮(壓縮方法二進制協議類,將 Integer 按 ZigZag 壓縮)

    3. TTupleProtocol:繼承自 TCompactProtocol,Struct 使用時更省空間

    4. TJSONProtocol:JSON 格式協議類,將數據封裝成 JSON 格式,再轉成 byte 數組交給傳輸層

    5. TSimpleJSONProtocol:JSON 格式協議類,但只支持寫的功能

  3. 處理層 Processor:

    1. TProcessor:基礎接口,process(TProtocol in, TProtocol out)

    2. TBaseProcessor:基礎抽象類,持有 processMap 對象,key 為方法名,value 為方法

    3. Processor:由聲明的 IDL 生成,實現 TProcessor 接口並繼承了 TBaseProcessor 類

    4. TAsyncProcessor:異步處理接口

    5. TBaseAsyncProcessor:異步處理抽象類

    6. AsyncProcessor:由聲明的 IDL 生成,實現 TAsyncProcessor 接口並繼承 TAsyncProcessor 類

  4. 服務層 Server:

    1. TServer:基礎抽象類,類似一個容器,持有 TProcessor、TTransport、TProtocol 的工廠對象,提供 server() 方法,用於啟動服務,stop() 用於停止服務

    2. TSimpleServer:單線程阻塞式服務

    3. TNonblockingServer:支持非阻塞單線程服務模型,基於 NIO 的 select 實現

    4. TThreadPoolServer:專門的線程接受請求並交給線程池處理,阻塞式線程池模型

Thrift 源碼學習一