亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

thrift的使用介紹

系統(tǒng) 1943 0

一、About? thrift???
二、什么是thrift,怎么工作? ?
三、Thrift? IDL?
四、Thrift?? Demo?
五、Thrift 協(xié)議棧 以及各層的使用(java 為例) ?
六、與protocolbuffer的區(qū)別 ?

一、About? thrift???
???????? thrift是一種可伸縮的跨語(yǔ)言服務(wù)的發(fā)展軟件框架。它結(jié)合了功能強(qiáng)大的軟件堆棧的代碼生成引擎,以建設(shè)服務(wù),工作效率和無(wú)縫地與C + +,C#,Java,Python和PHP和Ruby結(jié)合。thrift是facebook開發(fā)的,我們現(xiàn)在把它作為開源軟件使用。thrift允許你定義一個(gè)簡(jiǎn)單的定義文件中的數(shù)據(jù)類型和服務(wù)接口。以作為輸入文件,編譯器生成代碼用來(lái)方便地生成RPC客戶端和服務(wù)器通信的無(wú)縫跨編程語(yǔ)言(來(lái)自百度百科)。????
? >>>最初由facebook開發(fā)用做系統(tǒng)內(nèi)個(gè)語(yǔ)言之間的RPC通信 。?
? >>>2007年由facebook貢獻(xiàn)到apache基金 ,現(xiàn)在是apache下的opensource之一 。?
? >>>支持多種語(yǔ)言之間的RPC方式的通信:php語(yǔ)言client可以構(gòu)造一個(gè)對(duì)象,調(diào)用相應(yīng)的服務(wù)方法來(lái)調(diào)用java語(yǔ)言的服務(wù) ,跨越語(yǔ)言的C/S?? rpc? 調(diào)用 。?


二、什么是thrift,怎么工作? ?

java? rmi的例子,代碼見(jiàn)附件,建立一個(gè)java rmi的流程? :?
? >>>定義一個(gè)服務(wù)調(diào)用接口 。?
? >>>server端:接口實(shí)現(xiàn)---impl的實(shí)例---注冊(cè)該服務(wù)實(shí)現(xiàn)(端口)---啟動(dòng)服務(wù)。?
? >>>client端:通過(guò)ip、端口、服務(wù)名,得到服務(wù),通過(guò)接口來(lái)調(diào)用 。?
? >>>rmi數(shù)據(jù)傳輸方式:java對(duì)象序列化 。?

Thrift? 服務(wù)??
? >>>例同rmi ,需要定義通信接口、實(shí)現(xiàn)、注冊(cè)服務(wù)、綁定端口……?
? >>>如何多種語(yǔ)言之間通信? ??
? >>>數(shù)據(jù)傳輸走socket(多種語(yǔ)言均支持),數(shù)據(jù)再以特定的格式(String ),發(fā)送,接收方語(yǔ)言解析?? 。?
??????? Object --->? String --->? Object? 。?

??? 問(wèn)題:編碼、解析完全需要自己做 ,復(fù)雜的數(shù)據(jù)結(jié)構(gòu)會(huì)編碼困難 .?


Thrift? 服務(wù) :thrift的中間編碼層?
? >>>java? Object ---> Thrift? Object ---> php? Object???
? >>> 定義thrift的文件 ,由thrift文件(IDL)生成 雙方語(yǔ)言的接口、model ,在生成的model以及接口中會(huì)有解碼編碼的代碼 。?
? >>>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++代碼?

三、Thrift? IDL?
?????????????????
?????? http://www.cnblogs.com/tianhuilove/archive/2011/09/05/2167669.html?

?????? http://wiki.apache.org/thrift/?
???????????
?????? http://wiki.apache.org/thrift/ThriftTypes?

四、Thrift?? Demo?
Thrift? IDL 文件?

Java代碼?? 收藏代碼
  1. namespace?java?com.gemantic.analyse.thrift.index??
  2. ??
  3. struct??NewsModel{??
  4. 1:i32?id?;??
  5. 2:string?title;??
  6. 3:string?content;??
  7. 4:string?media_from;??
  8. 5:string?author;??
  9. }??
  10. ??
  11. service?IndexNewsOperatorServices?{??
  12. bool?indexNews( 1:NewsModel?indexNews),??
  13. bool?deleteArtificiallyNews( 1:i32?id?)??
  14. }??



java? server?

Java代碼?? 收藏代碼
  1. package?com.gemantic.analyse.thrift.index;??
  2. ??
  3. import?java.net.InetSocketAddress;??
  4. ??
  5. import?org.apache.thrift.protocol.TBinaryProtocol;??
  6. import?org.apache.thrift.server.TServer;??
  7. import?org.apache.thrift.server.TThreadPoolServer;??
  8. import?org.apache.thrift.server.TThreadPoolServer.Args;??
  9. import?org.apache.thrift.transport.TServerSocket;??
  10. import?org.apache.thrift.transport.TServerTransport;??
  11. import?org.apache.thrift.transport.TTransportFactory;??
  12. ??
  13. public? class?ThriftServerTest?{??
  14. ??
  15. ???? /**?
  16. ?????*?@param?args?
  17. ?????*/??
  18. ???? public? static? void?main(String[]?args)?{??
  19. ???????? //?TODO?Auto-generated?method?stub??
  20. ????????IndexNewsOperatorServices.Processor?processor?=? new?IndexNewsOperatorServices.Processor( new?IndexNewsOperatorServicesImpl());??
  21. ???????? try{??
  22. ????????????TServerTransport?serverTransport?=? new?TServerSocket(? new?InetSocketAddress( "0.0.0.0", 9813));??
  23. ????????????Args?trArgs= new?Args(serverTransport);??
  24. ????????????trArgs.processor(processor);??
  25. ???????????? //使用二進(jìn)制來(lái)編碼應(yīng)用層的數(shù)據(jù)??
  26. ????????????trArgs.protocolFactory( new?TBinaryProtocol.Factory( true,? true));??
  27. ???????????? //使用普通的socket來(lái)傳輸數(shù)據(jù)??
  28. ????????????trArgs.transportFactory( new?TTransportFactory());??
  29. ????????????TServer?server?=? new?TThreadPoolServer(trArgs);??
  30. ????????????System.out.println( "server?begin?......................");??
  31. ????????????server.serve();??
  32. ????????????System.out.println( "---------------------------------------");??
  33. ????????????server.stop();??
  34. ????????} catch(Exception?e){??
  35. ???????????? throw? new?RuntimeException( "index?thrift?server?start?failed!!"+ "/n"+e.getMessage());??
  36. ????????}??
  37. ????}??
  38. ??
  39. }??



java client?

Java代碼?? 收藏代碼
  1. package?com.gemantic.analyse.thrift.index;??
  2. ??
  3. import?org.apache.thrift.TException;??
  4. import?org.apache.thrift.protocol.TBinaryProtocol;??
  5. import?org.apache.thrift.protocol.TProtocol;??
  6. import?org.apache.thrift.transport.TSocket;??
  7. import?org.apache.thrift.transport.TTransport;??
  8. ??
  9. public? class?ThriftClientTest?{??
  10. ??
  11. ???? /**?
  12. ?????*?@param?args?
  13. ?????*?@throws?TException??
  14. ?????*/??
  15. ???? public? static? void?main(String[]?args)? throws?TException?{??
  16. ???????? //?TODO?Auto-generated?method?stub??
  17. ????????TTransport?transport?=? new?TSocket( "10.0.0.41",? 9813);??
  18. ???????? long?start=System.currentTimeMillis();??
  19. //??????TTransport?transport?=?new?TSocket("218.11.178.110",9090);??
  20. ????????TProtocol?protocol?=? new?TBinaryProtocol(transport);??
  21. ????????IndexNewsOperatorServices.Client?client= new?IndexNewsOperatorServices.Client(protocol);??
  22. ????????transport.open();??
  23. ??
  24. ??????????
  25. ????????client.deleteArtificiallyNews( 123456);??
  26. ????????NewsModel?newsModel= new?NewsModel();??
  27. ????????newsModel.setId( 789456);??
  28. ????????newsModel.setTitle( "this?from?java?client");??
  29. ????????newsModel.setContent( " 世界杯比賽前,由于塞爾維亞和黑山突然宣布分裂,國(guó)際足聯(lián)開會(huì)決定剔除塞黑,由世界上球迷最多的國(guó)家頂替,名額恰巧來(lái)到中國(guó)。舉國(guó)上下一片歡騰,中國(guó)足協(xié)決定由“成世鐸”(成龍+閻世鐸)組隊(duì),進(jìn)軍世界杯。");??
  30. ????????newsModel.setAuthor( "ddc");??
  31. ????????newsModel.setMedia_from( "新華08");??
  32. ????????client.indexNews(newsModel);??
  33. ????????transport.close();??
  34. ????????System.out.println((System.currentTimeMillis()-start));??
  35. ????????System.out.println( "client?sucess!");??
  36. ????}??
  37. ??
  38. }??



php client?

Php代碼?? 收藏代碼
  1. <?php??
  2. $GLOBALS[ 'THRIFT_ROOT']?=? '/home/tjiang/demo/thrift/lib/php/src';??
  3. require_once? $GLOBALS[ 'THRIFT_ROOT']. '/Thrift.php';??
  4. require_once? $GLOBALS[ 'THRIFT_ROOT']. '/protocol/TBinaryProtocol.php';??
  5. require_once? $GLOBALS[ 'THRIFT_ROOT']. '/transport/TSocket.php';??
  6. require_once? $GLOBALS[ 'THRIFT_ROOT']. '/transport/THttpClient.php';??
  7. require_once? $GLOBALS[ 'THRIFT_ROOT']. '/transport/TBufferedTransport.php';??
  8. include_once? $GLOBALS[ 'THRIFT_ROOT']. '/packages/TestThrift/TestThrift_types.php';??
  9. include_once? $GLOBALS[ 'THRIFT_ROOT']. '/packages/TestThrift/IndexNewsOperatorServices.php';??
  10. $data= array(??
  11. 'id'=> '1',??
  12. 'title'=> 'demo-標(biāo)題',??
  13. 'content'=> 'demo-內(nèi)容',??
  14. 'media_from'=> 'hexun',??
  15. 'author'=> 'xiaodi667'??
  16. );??
  17. $thrif_server_url?=? '10.0.0.41';??
  18. $transport?=? new?TSocket( $thrif_server_url,?9813);??
  19. $transport->open();??
  20. ??
  21. $protocol?=? new?TBinaryProtocol( $transport);??
  22. ??
  23. $client=? new?IndexNewsOperatorServicesClient( $protocol,? $protocol);??
  24. $obj?=? new?NewsModel( $data);??
  25. $result?=? $client->indexNews( $obj);??
  26. ??
  27. $transport->close();??
  28. ?>??



python client?

Python代碼?? 收藏代碼
  1. #!/usr/bin/env?python??
  2. ??
  3. #??
  4. #?Licensed?to?the?Apache?Software?Foundation?(ASF)?under?one??
  5. #?or?more?contributor?license?agreements.?See?the?NOTICE?file??
  6. #?distributed?with?this?work?for?additional?information??
  7. #?regarding?copyright?ownership.?The?ASF?licenses?this?file??
  8. #?to?you?under?the?Apache?License,?Version?2.0?(the??
  9. #?"License");?you?may?not?use?this?file?except?in?compliance??
  10. #?with?the?License.?You?may?obtain?a?copy?of?the?License?at??
  11. #??
  12. #???http://www.apache.org/licenses/LICENSE-2.0??
  13. #??
  14. #?Unless?required?by?applicable?law?or?agreed?to?in?writing,??
  15. #?software?distributed?under?the?License?is?distributed?on?an??
  16. #?"AS?IS"?BASIS,?WITHOUT?WARRANTIES?OR?CONDITIONS?OF?ANY??
  17. #?KIND,?either?express?or?implied.?See?the?License?for?the??
  18. #?specific?language?governing?permissions?and?limitations??
  19. #?under?the?License.??
  20. #??
  21. ??
  22. import?sys??
  23. ??
  24. from?TestThrift.ttypes? import?NewsModel??
  25. from?TestThrift.IndexNewsOperatorServices? import?Client??
  26. ??
  27. from?thrift? import?Thrift??
  28. from?thrift.transport? import?TSocket??
  29. from?thrift.transport? import?TTransport??
  30. from?thrift.protocol? import?TBinaryProtocol??
  31. ??
  32. try:??
  33. ??
  34. ?? #?Make?socket??
  35. ??transport?=?TSocket.TSocket( '10.0.0.41',? 9813)??
  36. ??
  37. ?? #?Buffering?is?critical.?Raw?sockets?are?very?slow??
  38. ??transport?=?TTransport.TBufferedTransport(transport)??
  39. ??
  40. ?? #?Wrap?in?a?protocol??
  41. ??protocol?=?TBinaryProtocol.TBinaryProtocol(transport)??
  42. ??
  43. ?? #?Create?a?client?to?use?the?protocol?encoder??
  44. ??client?=?Client(protocol)??
  45. ??
  46. ?? #?Connect!??
  47. ??transport.open()??
  48. ??
  49. ??client.deleteArtificiallyNews( 123)??
  50. ????
  51. ??newsModel=NewsModel()??
  52. ??newsModel.id= 123456??
  53. ??newsModel.title= "python?Test"??
  54. ??newsModel.content= "client?test??come?from?python";??
  55. ??newsModel.media_from= "xinhua08"??
  56. ????
  57. ??client.indexNews(newsModel)??
  58. ????
  59. ?? #close??
  60. ??transport.close()??
  61. except?Thrift.TException,?tx:??
  62. ?? print? '%s'?%?(tx.message)??



Csharp client?

C#代碼?? 收藏代碼
  1. TTransport?transport?=? new?TSocket( "10.0.0.41",?9813);??
  2. TProtocol?protocol?=? new?TBinaryProtocol(transport);??
  3. IndexNewsOperatorServices.Client?client?=? new?IndexNewsOperatorServices.Client(protocol);??
  4. ??
  5. transport.Open();??
  6. NewsModel?model?=? new?NewsModel();??
  7. model.Author?=? "jww";??
  8. model.Title?=? "title";??
  9. model.Content?=? "client???Come???From???CSharp";??
  10. model.Id?=?1;??
  11. ??
  12. client.deleteArtificiallyNews(123);??
  13. Console.WriteLine(client.indexNews(model));??




五、Thrift 協(xié)議棧 以及各層的使用(java 為例) ?
thrift的使用介紹 ?
1、model?? interface?
?????? 服務(wù)的調(diào)用接口以及接口參數(shù)model、返回值model?
2、Tprotocol??? 協(xié)議層?
???????? 將數(shù)據(jù)(model)編碼 、解碼 。?
3、Ttramsport 傳輸層?
??????? 編碼后的數(shù)據(jù)傳輸(簡(jiǎn)單socket、http)?
5、Tserver?
??????? 服務(wù)的Tserver類型,實(shí)現(xiàn)了幾種rpc調(diào)用(單線程、多線程、非阻塞IO)?

六、與protocolbuffer的區(qū)別 ?
http://liuchangit.com/development/346.html?
????????????
http://stackoverflow.com/questions/69316/biggest-differences-of-thrift-vs-protocol-buffers?

區(qū)別:?
1、Another important difference are the languages supported by default.??? protobuf: Java, C++, Python??? Thrift: Java, C++, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, Ocaml?
支持語(yǔ)言不同,thrift支持著更多的語(yǔ)言 。?
2、Thrift supports ‘exceptions 。?
?? thrift支持服務(wù)的異常 。?
3、Protocol Buffers much easier to read 。Protobuf API looks cleaner, though the generated classes are all packed as an inner classes which is not so nice.?
?? Protocol Buffers 在文檔方面比thrift豐富,而且比thrift簡(jiǎn)單 。?
4、Protobuf serialized objects are about 30% smaller then Thrift.?
?? Protocol Buffers在序列化/反序列化、傳輸上性能更優(yōu) 。?
5、RPC is another key difference. Thrift generates code to implement RPC clients and servers wheres Protocol Buffers seems mostly designed as a data-interchange format alone.??
??? thrift提供了一套完整的rpc服務(wù)實(shí)現(xiàn)(多線程socket、非阻塞的socket....)?
6、And according to the wiki the Thrift runtime doesn't run on Windows.?
?? thrift 對(duì)有些語(yǔ)言在windows上不支持:C++?? .....?

thrift的使用介紹


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: bbw老妇xxx| 中文字幕日韩哦哦哦 | 老妇女性较大毛片 | 久久激情影院 | 久久中国| 一个色亚洲 | 欧美精品亚洲精品日韩专区 | 亚洲欧美日韩国产精品26u | 美女视频黄的全i免费 | 久久久久国产一级毛片高清板 | 欧美国产永久免费看片 | 亚洲五月综合缴情婷婷 | 91在线免费视频观看 | 毛片破处 | 亚洲第一人黄所 | 五月天婷亚洲天综合网精品偷 | 日本一区二区三区中文字幕 | 91在线播放视频 | 99热最新 | 日韩不卡一区二区三区 | 成人影视在线观看 | 国产一区二区三区精品视频 | s8国产成人精品视频 | 国产成人8x视频一区二区 | 国产亚洲综合色就色 | 四虎国产精品免费入口 | 在线视频 亚洲 | 久热最新视频 | 日日骑夜夜操 | 亚洲码欧美码一区二区三区 | 二区中文字幕 | 鲁一鲁中文字幕久久 | 99国产精品高清一区二区二区 | 日本老年人精品久久中文字幕 | 美女在线国产 | 九九99九九视频在线观看 | 91精品综合久久久久3d动漫 | 欧美 xx性 在线 | 亚洲国产欧美国产第一区二区三区 | 色综合中文字幕在线亚洲 | 久久久久久久免费 |