1. 程式人生 > >利用Thrift,實現java、php資料通訊

利用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