感谢支持
我们一直在努力

Windows环境下Thrift的安装、编译以及测试

Ubuntu 8.0+环境下Thrift的安装与编译请参见 http://www.linuxidc.com/Linux/2011-12/50207.htm 


1、首先安装Cygwin


Cygwin 是一个用于 Windows 的类 UNIX shell 环境。 它由两个组件组成:一个 UNIX API 库,它模拟 UNIX 操作系统提供的许多特性;以及 Bash shell 的改写版本和许多 UNIX 实用程序,它们提供大家熟悉的 UNIX 命令行界面。前一个组件是一个 Windows 动态链接库 (DLL)。后一个组件是一组基于 Cygwin DLL 的程序,其中许多是用未经修改的 UNIX 源代码编译的。它们合在一起提供大家熟悉的 UNIX 环境。


具体安装步骤请参见 http://www.linuxidc.com/Linux/2009-03/18803.htm


官方文档上面说明了必须安装以下包:


GNU build tools (autoconf 2.60, automake 1.10, libtool 1.5.24)
boost 1.33.1+
g++ 4.0+
bison 2.3-1
boost 1.33.1-4
boost-devel 1.33.1-4
flex 2.5.33-1
pkgconfig
libtool


所以在安装Cygwin时请务必选择安装上述包,(图省事的童鞋可以安装Cygwin的所有包,安装完整版本的好处是可以尽可能的在windows环境下模拟linux环境,便于项目的移植!缺点就是太耗时了.。。。)


2、安装Ant


下载Ant,并且配置环境变量


(偶然的发现,我的Ant并没有放在cygwin模拟的/usr/local/bin下,因为我之前就下好了,并且在windows中已经配置过,然后我在Cygwin中使用ant居然也可以,呵呵,也许Cygwin环境变量和windows中是可以互相调用的,起码Ant是这样的!)


测试Ant:


Windows环境下Thrift的安装、编译以及测试

ok,Ant配置成功


3、下载Thrift最新版本并解压缩后,开始安装与编译吧~


①进入Thrift主目录


./configure


②这个地方跟在ubuntu下有点不一样哦~


compiler/cpp


③编译


make make install


测试一下看看是否成功?


thrift -r


运行结果如图,ok,终于成功啦,我的机器有点慢,编译了好长时间。


Windows环境下Thrift的安装、编译以及测试

4、编译Thrift支持Java的Jar包


cd ../.. 进入主目录


cd lib/java 进入存放jar文件的目录,


使用ant进行编译,成功生成build文件夹以及内部的jar包,如图


Windows环境下Thrift的安装、编译以及测试

5、使用Thrift进行Java服务器与客户端的通信


①.编写user.thrift文件


struct User {


1: i32 id,


2: string name,


}


service UserStorage {


void set_user(1: string name)


User get_user(1: i32 id)


}


在此目录下运行thrift命令,生成相应的java文件


thrift -r -gen java user.thrift


(如果想要生成其他的文件,如ruby,则thrift -r -gen rb user.thrift)


gen-java下面有两个文件 User.java(对struct User的实现) 和 UserStorage.java(对service UserStorage的实现)


②使用Eclipse新建两个工程非别导入User.java与UserStorage.java文件


build path,引入lib/java下相关jar文件:


libthrift-0.7.0.jar


commons-codec-1.3.jar


httpcore-4.0.1.jar


slf4j-api-1.5.8.jar


commons-lang-2.5.jar


junit-4.4.jar


slf4j-log4j12-1.5.8.jar


commons-logging-1.1.1.jar


log4j-1.2.14.jar


httpclient-4.0.1.jar


servlet-api-2.5.jar

③Java 服务端代码:






 

  1. /** 

  2.  * @author 张进 

  3.  */  

  4. public class JavaServer implements UserStorage.Iface {  

  5. private User mUser;  

  6. public JavaServer(){  

  7. mUser = new User();  

  8. mUser.setId(100);  

  9. }  

  10. public static void main(String[] args) {  

  11. JavaServer handler = new JavaServer();  

  12. handler.startServer(handler,9090);  

  13. }  

  14. /** 

  15.  * @param handler Server端实例 

  16.  * @param port 绑定本机端口号 

  17.  */  

  18. public void startServer(JavaServer handler , int port){  

  19. try {  

  20. UserStorage.Processor processor = new UserStorage.Processor(handler);  

  21. TServerSocket serverTransport = new TServerSocket(port);  

  22. Factory portFactory = new TBinaryProtocol.Factory(truetrue);  

  23. Args arg = new Args(serverTransport);  

  24. arg.processor(processor);  

  25. arg.protocolFactory(portFactory);  

  26. TServer server = new TThreadPoolServer(arg);  

  27. server.serve();  

  28. catch (TTransportException e) {  

  29. e.printStackTrace();  

  30. }  

  31. }  

  32. @Override  

  33. public void set_user(String name) throws TException {  

  34. System.out.println(“name is “+name);  

  35. mUser.setName(name);  

  36. }  

  37. @Override  

  38. public User get_user(int id) throws TException {  

  39. if(100 == id){  

  40. return mUser;  

  41. }else{  

  42. return new User(50“默认用户”);  

  43. }  

  44. }  

  45. }    


④Java客户端代码






 

  1. public class JavaClient extends UserStorage.Client {  

  2. public JavaClient(TProtocol prot) {  

  3. super(prot);  

  4. }  

  5. public static void main(String[] args) {  

  6. TTransport transport;  

  7. transport = new TSocket(“localhost”9090);  

  8. TProtocol protocol = new TBinaryProtocol(transport);  

  9. JavaClient client = new JavaClient(protocol);  

  10. try {  

  11. transport.open();  

  12. client.set_user(“新用户”);  

  13. User user = client.get_user(50);  

  14. System.out.println(“>>>>>>>>”+user.name);  

  15. transport.close();  

  16. catch (TTransportException e) {  

  17. e.printStackTrace();  

  18. catch (TException e) {  

  19. e.printStackTrace();  

  20. }  

  21. }  

  22. }  


⑥JAVA服务端与JAVA客户端运行结果:


server:


name is 新用户


client:


>>>>>>>>默认用户

赞(0) 打赏
转载请注明出处:服务器评测 » Windows环境下Thrift的安装、编译以及测试
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏