一、簡介
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數據傳輸方式)