前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Thrift交流(一)简单的Thrift

Thrift交流(一)简单的Thrift

作者头像
bear_fish
发布2018-09-20 10:16:20
8360
发布2018-09-20 10:16:20
举报

http://blog.csdn.net/arjick/article/details/13293073

Thrift是一个可伸缩的跨语言的服务开发框架,是facebook开发的一个跨语言通信平台。为各种语言提供快捷的rpc服务。现阶段已经支持C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml等语言。在近来的工作中,重新学习Thrift通信的内容,和大家做个简单的交流。

Thrift示意图

1)安装Thrift环境

Thrift的环境的安装并不复杂,我们现在以最简单的windows环境做个案例。

首先在官方网站下载最新的thrift exe文件,http://thrift.apache.org/download/

然后把exe文件改名为thrift.exe,放在了windows的目录下,如图所示:

接着配置thrift环境变量:

测试Thrift运行环境:

2)编写Thrift文件

thrift文件如下

[java] view plaincopy

  1. namespace java thrift  // defines the namespace  
  2. typedef i32 int //typedefs to get convenient names for your types
  3. service ThriftService {    
  4. int add(1:int a,2:int b),  
  5. }  

通过命令行执行Thrift文件,并生成

3)建立Thrift工程

首先建立maven工程,把如下内容加到pom.xml

[html] view plaincopy

  1. <dependency>
  2. <groupId>org.apache.thrift</groupId>
  3. <artifactId>libthrift</artifactId>
  4. <version>0.9.0</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.slf4j</groupId>
  8. <artifactId>slf4j-api</artifactId>
  9. <version>1.7.5</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.slf4j</groupId>
  13. <artifactId>slf4j-simple</artifactId>
  14. <version>1.7.5</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>org.slf4j</groupId>
  18. <artifactId>slf4j-log4j12</artifactId>
  19. <version>1.7.5</version>
  20. </dependency>
  21. <dependency>
  22. <groupId>log4j</groupId>
  23. <artifactId>log4j</artifactId>
  24. <version>1.2.17</version>
  25. </dependency>

[html] view plaincopy

编写ThriftService的实现类:

代码如下:

[java] view plaincopy

  1. package thrift;  
  2. import org.apache.thrift.TException;  
  3. public class ThriftServiceImpl implements Iface {  
  4. @Override
  5. public int add(int a, int b) throws TException {  
  6. return a + b;  
  7.     }  
  8. }  

4)编写服务器及测试

[java] view plaincopy

  1. package com.duowan.yy.thriftTest;  
  2. import org.apache.thrift.TProcessor;  
  3. import org.apache.thrift.protocol.TBinaryProtocol;  
  4. import org.apache.thrift.protocol.TBinaryProtocol.Factory;  
  5. import org.apache.thrift.server.TServer;  
  6. import org.apache.thrift.server.TSimpleServer;  
  7. import org.apache.thrift.transport.TServerSocket;  
  8. import org.apache.thrift.transport.TTransportException;  
  9. import thrift.ThriftService;  
  10. import thrift.ThriftServiceImpl;  
  11. public class ThriftServer {  
  12. public static void main(String[] args) {  
  13. try {  
  14.             TServerSocket serverTransport = new TServerSocket(7911);  
  15.             Factory proFactory = new TBinaryProtocol.Factory();  
  16.             TProcessor processor = new ThriftService.Processor<ThriftService.Iface>(  
  17. new ThriftServiceImpl());  
  18.             TServer.Args tArgs = new TServer.Args(serverTransport);  
  19.             tArgs.processor(processor);  
  20.             tArgs.protocolFactory(proFactory);  
  21.             TServer server = new TSimpleServer(tArgs);  
  22.             System.out.println("Start server on port 7911....");  
  23.             server.serve();  
  24.         } catch (TTransportException e) {  
  25.             e.printStackTrace();  
  26.         }  
  27.     }  
  28. }  

测试启动:

编写测试类:

[java] view plaincopy

  1. package com.duowan.yy.thriftTest;  
  2. import org.apache.thrift.TException;  
  3. import org.apache.thrift.protocol.TBinaryProtocol;  
  4. import org.apache.thrift.protocol.TProtocol;  
  5. import org.apache.thrift.transport.TSocket;  
  6. import org.apache.thrift.transport.TTransport;  
  7. import org.apache.thrift.transport.TTransportException;  
  8. import thrift.ThriftService;  
  9. public class Test {  
  10. /**
  11.      * @param args
  12.      */
  13. public static void main(String[] args) {  
  14. try {  
  15.             TTransport transport = new TSocket("localhost", 7911);  
  16.             transport.open();  
  17.             TProtocol protocol = new TBinaryProtocol(transport);  
  18.             ThriftService.Client client = new ThriftService.Client(protocol);  
  19.             System.out.println(client.add(77, 5));  
  20.             transport.close();  
  21.         } catch (TTransportException e) {  
  22. // TODO Auto-generated catch block
  23.             e.printStackTrace();  
  24.         } catch (TException e) {  
  25. // TODO Auto-generated catch block
  26.             e.printStackTrace();  
  27.         }  
  28.     }  
  29. }  

  效果如下:

简单的Thrift之旅已经完成了,希望大家玩的开心。

Thrift交流(二)thrift服务端和客户端实现 Nifty http://blog.csdn.net/arjick/article/details/18364513

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年11月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档