Thrift 的各項傳輸協議和Socket方式及各種Server的特性
(1).支持的傳輸格式
TBinaryProtocol 二進制格式
TCompactProtocol 壓縮格式
TJSONProtocol JSON格式
TSimpleJSONProtocol 提供JSON只寫協議,生成的文件很容易通過腳本語言解析
TDebugProtocol 使用易懂的可讀的文本格式以便於debug
(2). 支持的數據傳輸方式
TSocket
阻塞式socket
THttpTransport
採用HTTP傳輸協議進行數據傳輸
TFramedTransport
以frame爲單位傳輸,非阻塞式服務中使用
TFileTransport
以文件形式進行傳輸
TMemoryTransport
將內存用於I/0,
TZlibTransport
使用zlib進行壓縮。
TBufferedTransport
對某個transport對象操作的數據進行buffer,即從buffer中讀取數據進行傳輸,或將數據直接寫入到buffer
(3). 支持的服務模型[主要是服務端類型]
TSimpleServer
簡單的單線程服務模型,常用於測試
TThreadedServer
多線程服務模型使用標準的阻塞式IO,每個請求創建一個線程
TThreadPoolServer
多線程服務模型使用標準的阻塞式IO,預先創建一組線程處理請求
TNonblockingServer
多線程服務模型使用非阻塞IO(需要用TFramedTransport數據傳輸方式 )
ps:什麼叫阻塞與非阻塞?
阻塞IO:socket的阻塞意味着必須要做完IO包括錯誤纔會返回
非阻塞IO:無論操作是否完成都會立刻返回,需要通過其他方式來判斷具體操作是否成功
在網絡阻塞嚴重的時候,網絡層沒有足夠的內存來進行寫操作,這時候就會出現寫不成功的情況,阻塞情況下會儘可能(有可能被中斷)等待到數據全部發送完畢, 對於非阻塞的情況就是一次寫多少算多少,沒有中斷的情況下也還是會出現write
到一部分的情況.