Thrift框架介紹

一、前言

Thrift是一個跨語言的服務部署框架,最初由Facebook於2007年開發,2008年進入Apache開源項目。Thrift經過一箇中間語言(IDL, 接口定義語言)來定義RPC的接口和數據類型,而後經過一個編譯器生成不一樣語言的代碼(目前支持C++,Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk和OCaml),並由生成的代碼負責RPC協議層和傳輸層的實現。java

 
二、架構

Thrift其實是實現了C/S模式,經過代碼生成工具將接口定義文件生成服務器端和客戶端代碼(能夠爲不一樣語言),從而實現服務端和客戶端跨語言的支持。用戶在Thirft描述文件中聲明本身的服務,這些服務通過編譯後會生成相應語言的代碼文件,而後用戶實現服務(客戶端調用服務,服務器端提服務)即可以了。其中protocol(協議層, 定義數據傳輸格式,能夠爲二進制或者XML等)和transport(傳輸層,定義數據傳輸方式,能夠爲TCP/IP傳輸,內存共享或者文件共享等)被用做運行時庫。
 
三、 支持的數據傳輸格式、數據傳輸方式和服務模型
(1)支持的傳輸格式
TBinaryProtocol – 二進制格式.
TCompactProtocol – 壓縮格式
TJSONProtocol – JSON格式
TSimpleJSONProtocol –提供JSON只寫協議, 生成的文件很容易經過腳本語言解析。
TDebugProtocol – 使用易懂的可讀的文本格式,以便於debug
(2) 支持的數據傳輸方式
TSocket -阻塞式socker
TFramedTransport – 以frame爲單位進行傳輸,非阻塞式服務中使用。
TFileTransport – 以文件形式進行傳輸。
TMemoryTransport – 將內存用於I/O. java實現時內部實際使用了簡單的ByteArrayOutputStream。
TZlibTransport – 使用zlib進行壓縮, 與其餘傳輸方式聯合使用。當前無java實現。
(3)支持的服務模型
TSimpleServer – 簡單的單線程服務模型,經常使用於測試
TThreadPoolServer – 多線程服務模型,使用標準的阻塞式IO。
TNonblockingServer – 多線程服務模型,使用非阻塞式IO(需使用TFramedTransport數據傳輸方式)
 
 
四、 Thrift安裝與部署
 
4.1Thrift安裝

到官網下載最新版本,截止今日(2012-06-11)最新版本爲0.8.0.apache

1. 若是是Maven構建項目的,直接在pom.xml 中添加以下內容:windows

 
<dependency>
  <groupId>org.apache.thrift</groupId>
  <artifactId>libthrift</artifactId>
  <version>0.8.0</version>
</dependency>

2.若是本身編譯lib包,把下載的壓縮包解壓到X:盤,而後在X:\thrift-0.8.0\lib\java 目錄下運行ant進行自動編譯,會在X:\thrift-0.8.0\lib\java\build\ 目錄下看到編譯好的lib包:libthrift-0.8.0.jar服務器

 利用Thrift部署服務的主要流程:編寫服務說明保存到.thrift文件,根據須要 編譯.thrift文件,生成相應的語言源代碼,根據實際須要編寫client端和server端代碼。
 
4.2Thrift部署

thrift-0.8.0.exe 是官網提供的windows下編譯工具,運用這個工具生成相關代碼:多線程

 生成源代碼的命令:
      要生成java代碼:thrift-0.8.0.exe -r -gen java ./demo.thrift,結果代碼存放在gen-java目錄下
 
client端和sever端代碼要調用編譯.thrift生成的中間文件。
在client端,用戶自定義CalculatorClient類型的對象(用戶在.thrift文件中聲明的服務名稱是Calculator, 則生成的中間代碼中的主類爲CalculatorClient), 該對象中封裝了各類服務,能夠直接調用(如client.ping()), 而後thrift會經過封裝的rpc調用server端同名的函數。
在server端,須要實如今.thrift文件中聲明的服務中的全部功能,以便處理client發過來的請求。
 
參考資料: http://dongxicheng.org/search-engine/thrift-framework-intro/
相關文章
相關標籤/搜索