1.什麼是Thriftphp
thrift是一種可伸縮的跨語言服務的發展軟件框架。它結合了功能強大的軟件堆棧的代碼生成引擎,以建設服務。不一樣開發語言開發的服務能夠經過該框架實現通訊。
thrift是facebook開發的,創造thrift是爲了解決facebook系統中各系統間大數據量的傳 輸通訊以及系統之間語言環境不一樣須要跨平臺的特性。所 以thrift能夠支持多種程序語言,例如: C++, C#, Cocoa, Erlang, Haskell, Java, Ocami, Perl, PHP, Python, Ruby, Smalltalk. 在多種不一樣的語言之間通訊thrift能夠做爲二進制的高性能的通信中間件,支持數據(對象)序列化和多種類型的RPC服務。Thrift經過接口定義語言 (interface definition language,IDL) 來定義數據類型和服務,Thrift接口定義文件由Thrift代碼編譯器生成thrift目標語言的代碼(目前支持C++,Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk和OCaml),並由生成的代碼負責RPC協議層和傳輸層的實現。
以做爲輸入文件,編譯器生成代碼用來方便地生成RPC客戶端和服務器通訊的無縫跨編程語言。簡而言之,開發者只需準備一份thrift腳本,經過thrift code generator(像gcc那樣輸入一個命令)就能生成所要求的開發語言代碼html
2.thrift怎麼工做?java
>>> 定義thrift的文件 ,由thrift文件(IDL)生成 雙方語言的接口、model ,在生成的model以及接口中會有解碼編碼的代碼 。
>>>thrift 文件例子
thrift-0.7.0.exe -r -gen java TestThrift.thrift 生成java 代碼
thrift-0.7.0.exe -r -gen php TestThrift.thrift 生成php代碼
thrift-0.7.0.exe -r -gen py TestThrift.thrift 生成python代碼
thrift-0.7.0.exe -r -gen as3 TestThrift.thrift 生成as3代碼
thrift-0.7.0.exe -r -gen cpp TestThrift.thrift 生成C++代碼。python
3.Thrift協議棧以及各層的使用編程
model interface
服務的調用接口以及接口參數model、返回值model
Tprotocol 協議層
將數據(model)編碼 、解碼 。
Ttransport 傳輸層
編碼後的數據傳輸(簡單socket、http)
Tserver
服務的Tserver類型,實現了幾種rpc調用(單線程、多線程、非阻塞IO)。服務器
協議:多線程
Thrift 可讓用戶選擇客戶端與服務端之間傳輸通訊協議的類別,在傳輸協議上整體劃分爲文本 (text) 和二進制 (binary) 傳輸協議,爲節約帶寬,提升傳輸效率,通常狀況下使用二進制類型的傳輸協議爲多數,有時還會使用基於文本類型的協議,這須要根據項目 產品中的實際需求。經常使用協議有如下幾種:框架
TBinaryProtocol —— 二進制編碼格式進行數據傳輸socket
使用方法如清單 3 和清單 4 所示。性能
TCompactProtocol —— 高效率的、密集的二進制編碼格式進行數據傳輸
構建 TCompactProtocol 協議的服務器和客戶端只需替換清單 3 和清單 4 中 TBinaryProtocol 協議部分便可
TJSONProtocol —— 使用 JSON 的數據編碼協議進行數據傳輸 構建 TJSONProtocol 協議的服務器和客戶端只需替換清單 3 和清單 4 中 TBinaryProtocol 協議部分便可
TSimpleJSONProtocol —— 只提供 JSON 只寫的協議,適用於經過腳本語言解析
傳輸層:
TSocket —— 使用阻塞式 I/O 進行傳輸,是最多見的模式
使用方法如清單 4 所示。
TFramedTransport —— 使用非阻塞方式,按塊的大小進行傳輸,相似於 Java 中的 NIO
若使用 TFramedTransport 傳輸層,其服務器必須修改成非阻塞的服務類型,