Thrift-java學習小結
原文出自【聽雲技術部落格】:http://blog.tingyun.com/web/article/detail/1083
Thrift是什麼?什麼情況下使用thrift
Thrift源於大名鼎鼎的facebook之手,在2007年facebook提交Apache基金會將Thrift作為一個開源專案,對於當時的facebook來說創造thrift是為了解決facebook系統中各系統間大資料量的傳輸通訊以及系統之間語言環境不同需要跨平臺的特性。所以thrift可以支援多種程式語言,例如: C++, C#, Cocoa, Erlang, Haskell, Java, Ocami, Perl, PHP, Python, Ruby, Smalltalk. 在多種不同的語言之間通訊thrift可以作為二進位制的高效能的通訊中介軟體,支援資料(物件)序列化和多種型別的RPC服務。Thrift是IDL(interface definition language)描述性語言的一個具體實現,Thrift適用於程式對程式靜態的資料交換,需要先確定好他的資料結構,他是完全靜態化的,當資料結構發生變化時,必須重新編輯IDL檔案,程式碼生成,再編譯載入的流程,跟其他IDL工具相比較可以視為是Thrift的弱項,Thrift適用於搭建大型資料交換及儲存的通用工具,對於大型系統中的子系統間資料傳輸相對於JSON和xml無論在效能、傳輸大小上有明顯的優勢。
Thrift 基礎架構
Thrift是一個服務端和客戶端的架構體系,就是socket傳輸,Thrift 具有自己內部定義的傳輸協議規範(TProtocol)和傳輸資料標準(TTransports),通過IDL指令碼對傳輸資料的資料結構(struct) 和傳輸資料的業務邏輯(service)根據不同的執行環境快速的構建相應的程式碼,並且通過自己內部的序列化機制對傳輸的資料進行簡化和壓縮提高高併發、 大型系統中資料互動的成本,下圖描繪了Thrift的整體架構,分為6個部分:1.你的業務邏輯實現(You Code) 2.客戶端和服務端對應的Service 3.執行讀寫操作的計算結果4.TProtocol 5.TTransports 6.底層I/O通訊
Thrift指令碼的資料型別
- Base Types:基本型別
bool Boolean, one byte
byte Signed byte
i16 Signed 16-bit integer
i32 Signed 32-bit integer
i64 Signed 64-bit integer
double 64-bit floating point value
string String
binary Blob (byte array)
Struct:結構體型別
Container:容器型別,即List、Set、Map
map Map from one type to another
list Ordered list of one type
set Set of unique elements of one type
Exception:異常型別
Service: 定義物件的介面,和一系列方法
協議
Thrift可以讓你選擇客戶端與服務端之間傳輸通訊協議的類別,在傳輸協議上總體上劃分為文字(text)和二進位制(binary)傳輸協議, 為節約頻寬,提供傳輸效率,一般情況下使用二進位制型別的傳輸協議為多數,但有時會還是會使用基於文字型別的協議,這需要根據專案/產品中的實際需求:
TBinaryProtocol – 二進位制編碼格式進行資料傳輸。
TCompactProtocol – 這種協議非常有效的,使用Variable-Length Quantity (VLQ) 編碼對資料進行壓縮。
TJSONProtocol – 使用JSON的資料編碼協議進行資料傳輸。
TSimpleJSONProtocol – 這種節約只提供JSON只寫的協議,適用於通過指令碼語言解析
TDebugProtocol – 在開發的過程中幫助開發人員除錯用的,以文字的形式展現方便閱讀。
傳輸層
TSocket- 使用堵塞式I/O進行傳輸,也是最常見的模式。
TFramedTransport- 使用非阻塞方式,按塊的大小,進行傳輸,類似於Java中的NIO。
TFileTransport- 顧名思義按照檔案的方式程式傳輸,雖然這種方式不提供Java的實現,但是實現起來非常簡單。
TMemoryTransport- 使用記憶體I/O,就好比Java中的ByteArrayOutputStream實現。
TZlibTransport- 使用執行zlib壓縮,不提供Java的實現。
服務端型別
TSimpleServer - 單執行緒伺服器端使用標準的堵塞式I/O。
TThreadPoolServer - 多執行緒伺服器端使用標準的堵塞式I/O。
TNonblockingServer – 多執行緒伺服器端使用非堵塞式I/O,並且實現了Java中的NIO通道。
Thrift構建步驟總結(參考例項1)
1 、下載thrift.exe
到thrift官網下載,這裡我用的是0.9.3版本
http://thrift.apache.org/
2、將exe放到C:\Windows下(重新命名為thrift.exe)
3、C:\Windows建立.thrift檔案,編寫ThriftServer.thrift程式碼
4、在目錄下執行thrift.exe -r -gen java ./ThriftServer.thrift;執行成功後看到在該目錄下生成了gen-java資料夾,在該資料夾中生成了IThriftServer.java;
5、將IThriftServer.java拷貝到server端,進行後續編寫即可。
6、如果client和server端是跨應用,那麼需要server端先編譯打包成jar,將這個jar新增到client端的依賴中。
相關文章
- 學習小結
- vue 學習小結Vue
- JavaScript學習小結JavaScript
- NFS學習小結NFS
- 小程式學習總結
- git學習小總結Git
- CommonsChunkPlugin學習小結Plugin
- 整合學習原理小結
- Spring 學習小結Spring
- qDebug 學習小結
- HTML5 學習小結HTML
- Activiti 學習筆記 小結筆記
- awk指令碼學習小結指令碼
- Android:Sqlitedatabase學習小結AndroidSQLiteDatabase
- WebPack持久快取學習小結Web快取
- Vue1.0學習小結2Vue
- 《angular 權威教程》學習小結Angular
- Thrift-java例項Java
- 不確定估計學習小結
- Nginx支援WebSocket反向代理-學習小結NginxWeb
- redis執行緒模型-學習小結Redis執行緒模型
- 學習vue第一階段小結Vue
- Android學習之 WebView使用小結AndroidWebView
- 7.15--7.19學習小結
- 【C#學習之辨析小總結】C#
- Nginx code 常用狀態碼學習小結Nginx
- 跟小師父學習QTP後的總結QT
- 軟體測試工具QTP學習小結QT
- 前端學習小結(一)—基礎入門篇前端
- RMAN學習小結1:不完全恢復
- cJSON學習及簡單應用小結JSON
- 【資料結構】第六章學習小結--- 圖資料結構
- 學習git以及github自己的一點小總結:Github
- 2020-10-28 學習小結(七)
- 2020-10-20 學習小結(四)
- Activiti 學習筆記一到六小結筆記
- 整合學習之Adaboost演算法原理小結演算法
- SQLite資料庫學習小結——Frameworks層實現SQLite資料庫Framework