thrift介绍及应用(二)—简单应用
原文:http://blog.csdn.net/guxch/article/details/12162131
-----------------------------------------------------------------------------------
【接上文“thrift介紹及應(yīng)用(一)—介紹”】
六、一個(gè)最簡單的實(shí)例
Thrift文件(demo.thirft,來自官網(wǎng))如下:
[plain]?view plaincopy[plain]?view plaincopy
- demo_constants:這個(gè)文件似乎沒有用,可以在其中定義全局變量之類的東西。
- demo_types:類型定義(例子中的structUserProfile)都在這個(gè)文件中。
- UserStorage:這個(gè)文件比較重要,內(nèi)容比較多,其中的內(nèi)如下圖。圖左邊是兩個(gè)service方法的傳入傳出參數(shù),注意其中每個(gè)的實(shí)現(xiàn)都有兩個(gè),一個(gè)是帶p的,被用在客戶端代碼中,另一個(gè)是不帶p的,被用在服務(wù)器端代碼中,其實(shí)它們的代碼相當(dāng)一致(相同的函數(shù)部分),不知道thrift這樣做的用意在哪。圖右邊UserStorageIf是消息接口定義,UserStorageIfFactory等是接口的“工廠”。UserStorageNull挺有意思,大概是什么都不做(既然什么都不做,要它做什么呢?)。UserStorageMultiface是將多個(gè)UserStorageIf集合起來(vector)處理。對(duì)用戶來講,客戶端真正有意義的代碼在UserStorageClient中,寫客戶端時(shí),需要認(rèn)真查看其接口,在其上編寫自己的業(yè)務(wù)邏輯。服務(wù)器的處理過程在UserStorageProcess類中(但我們自己邏輯在另外的地方)。
- UserStorage_server.skeleton:這個(gè)是服務(wù)器端的框架(其實(shí)它可以運(yùn)行),我們自己的邏輯(例子中store到數(shù)據(jù)庫中或從數(shù)據(jù)庫中retrieve)在UserStorageHandler類中實(shí)現(xiàn),這個(gè)類從UserStorageIf繼承而來。文件中還有一個(gè)main函數(shù),其中給出了以TSimpleServer形式(單線程)實(shí)現(xiàn)的服務(wù)器。實(shí)際的應(yīng)用中,UserStorage_server.skeleton這個(gè)文件將被拆分,業(yè)務(wù)邏輯可能有若干文件,服務(wù)器端的實(shí)現(xiàn)也許要復(fù)雜一些,與其他業(yè)務(wù)構(gòu)成一個(gè)main函數(shù),這里的main可能叫做thriftserver_main更合適一些。
需要強(qiáng)調(diào)的是,thrift有自己的網(wǎng)絡(luò)傳輸格式,因此thrift應(yīng)用適合于我們不關(guān)心傳輸過程,只關(guān)心我們自己的應(yīng)用層的消息的傳遞(也就是RPC的概念)的場合,如果規(guī)定了網(wǎng)絡(luò)傳輸協(xié)議,thrift并不適合。
其他實(shí)際的應(yīng)用見hadoop和Hbase的Thrift接口說明。
?
【注:本文參考了Mark Slee, Aditya Agarwal and Marc Kwiatkowski寫的“Thrift:Scalable Cross-Language Services Implementation”一文,該文是Thrift的White Paper?!?/p>
總結(jié)
以上是生活随笔為你收集整理的thrift介绍及应用(二)—简单应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: postgresql 插入 时间戳_数据
- 下一篇: Druid使用起步—在javaWeb项目