利用Thrift,實現java、php資料通訊
Thrift是一個軟體框架(遠端過程呼叫框架),用來進行可擴充套件且跨語言的服務的開發,封裝了資料傳輸格式(二進位制、json)和網路通訊的服務框架,提供多語言(C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml)的網路伺服器端和客戶端程式元件
適用於搭建大型資料交換及儲存的通用工具,對於大型系統中的內部資料傳輸相對於JSON和xml無論在效能、傳輸大小上有明顯的優勢。
本文以註冊服務介面和登入伺服器介面為教程,
Thrift開發的幾個概念:
Server 服務模型
Handler 資料處理介面
Processor 資料處理物件
Protocol 資料傳輸協議
Transport 資料傳輸方式
(1)支援的傳輸格式
TBinaryProtocol – 二進位制格式.
TCompactProtocol – 壓縮格式
TJSONProtocol – JSON格式
TSimpleJSONProtocol –提供JSON只寫協議, 生成的檔案很容易通過指令碼語言解析。
TDebugProtocol – 使用易懂的可讀的文字格式,以便於debug
(2) 支援的通訊方式(資料傳輸方式)(Transport)
TFileTransport:檔案(日誌)傳輸類,允許client將檔案傳給server,允許server將收到的資料寫到檔案中。
THttpTransport:採用Http傳輸協議進行資料傳輸
TSocket:採用TCP Socket進行資料傳輸
TZlibTransport:壓縮後對資料進行傳輸,或者將收到的資料解壓
下面幾個類主要是對上面幾個類地裝飾(採用了裝飾模式),以提高傳輸效率。
TBufferedTransport:對某個Transport物件操作的資料進行buffer,即從buffer中讀取資料進行傳輸,或者將資料直接寫入buffer
TFramedTransport:以frame為單位進行傳輸,非阻塞式服務中使用。同TBufferedTransport類似,也會對相關資料進行buffer,同時,它支援定長資料傳送和接收。
TMemoryBuffer:從一個緩衝區中讀寫資料
(3)支援的服務模型
TSimpleServer – 簡單的單執行緒服務模型,常用於測試
TThreadedServer - 多執行緒服務模型,使用阻塞式IO,每個請求建立一個執行緒。
TThreadPoolServer – 執行緒池服務模型,使用標準的阻塞式IO,預先建立一組執行緒處理請求。
TNonblockingServer – 多執行緒服務模型,使用非阻塞式IO(需使用TFramedTransport資料傳輸方式)
處理大量更新的話,主要是在TThreadedServer和TNonblockingServer中進行選擇。TNonblockingServer能夠使用少量執行緒處理大量併發連線,但是延遲較高;TThreadedServer的延遲較低。實際中,TThreadedServer的吞吐量可能會比TNonblockingServer高,但是TThreadedServer的CPU佔用要比TNonblockingServer高很多。
服務端編寫的一般步驟:
1. 建立Handler
2. 基於Handler建立Processor
3. 建立Transport(通訊方式)
4. 建立Protocol方式(設定傳輸格式)
5. 基於Processor, Transport和Protocol建立Server
6. 執行Server
客戶端編寫的一般步驟:
1. 建立Transport
2. 建立Protocol方式
3. 基於Transport和Protocol建立Client
4. 執行Client的方法
下面開始正式程式碼教程
服務描述檔案test.thrift,定義了login服務和register