Thrift簡介及使用

一、簡介

1.Thrift是一種典型的CS(客戶端/服務端)結構,客戶端與服務端可以使用不同的語言開發。既然客戶端和服務端能使用不同的語言開發,那么一定就要有一種之間語言來管理客戶端和服務端的語言,這種語言就是IDL(Interface Description Language).

2.Thrift不支持無符號類型,因為很多語言不存在無符號類型,比如Java

3.集合中的元素可以是除了service之外的任何類型,包括exception

thrift容器類型:

(1)list:一系列由T類型的數據組成的有序列表,元素可以重復

(2)set:一系列由T類型的數據組成的無序列表,元素不可重復

(3)map:一個字典結構,key為K類型,value為V類型,相當于Java中的HashMap

4.thrift定義服務相當于Java中創建Interface一樣,關鍵字service

typedef定義別名

const定義常量

namespace相當于Java的package,namespace 語言 路徑

include引入包

#和//開頭為注釋,/**/包裹的也是注釋

required必選,optional可選

5.thrift傳輸協議

(1)TBinaryProtocal:二進制格式

(2)TCompactProtocal:壓縮格式,比TBinaryProtocal效率更高

(3)TJSONProtocal:JSON格式

(4)TSimpleJSONProtocal:提供JSON只寫協議,生成的文件很容易通過腳本語言解析,極少使用,缺少元數據

(5)TDebugProtocal:使用易懂的可讀的文本格式,以便于debug

6.thrift傳輸方式

(1)TSocket:阻塞式socket,效率低,使用少

(2)TFramedTransport:以frame為單位進行壓縮,非阻塞式服務中使用

(3)TFileTransport:以文件形式進行傳輸

(4)TMemoryTransport:將內存用于I/O,java實現時內部實際使用了簡單的ByteArrayOutputStream

(5)TZlibTransport:使用zlib進行壓縮,與其他傳輸方式聯合使用,當前無java實現

7.thrift支持的服務模型:

(1)TSimpleServer:簡單的單線程服務模型,常用于測試

(2)TThreadPoolServer:多線程服務模型,使用標準的阻塞式IO,來一個請求起一個線程

(3)TNonblockingServer:多線程服務模型,使用非阻塞式IO(需使用TFramedTransport數據傳輸方式)

(4)THsHaServer:繼承自TNonblockingServer,THsHa引入了線程池去處理,其模型把讀寫任務放到線程池去處理;Half-sync/Half-async的處理模式,Half-async是在處理IO事件上(accept/read/write IO),Half-sync用于handler對rpc的同步處理(需使用TFramedTransport數據傳輸方式)

二、使用


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容