• 文件设置Thrift实例


    时间紧张,先记一笔,后续优化与完善。

        要学习Thrift,它的官网上有资料分析以及实例,可以到官网:http://thrift.apache.org/上查看。

        在官网下载thrift的资源包,安装编译生成响应语言下的jar包,详细在windows下或者ubuntu下的安装参见:

        Thrift 学习笔记2——Windows环境下Thrift的安装、编译以及测试

        Thrift 学习笔记1——Ubuntu环境下Thrift的安装、编译以及测试

        我主要是利用java语言实现Thrift的实例。因为感觉安装起来比拟麻烦,所以不想去安装thrift,我直接应用别人已经编译好的jar包,将这些jar包直接添加到我的Myeclipse工程下就能够编写Thrift的项目了。此外,thrift文件主动生成java代码需要应用thrift-0.9.0.exe,以上文件可以到这里去下载:

        thrift-0.9.0.exe下载地址

        Java语言Thrift工程需要的jar包下载地址

        libthrift-0.9.0.jar

        下面通过几个实例来说明Thrift的应用方法:

        1、我们将下载的thrift-0.9.0.exe放置在目录D:\Thrift下

        2、编写Hello.thrift文件

    service Hello{
    	string helloString(1:string para)
    	i32 helloInt(1:i32 para)
    	bool helloBoolean(1:bool para)
    	void helloVoid()
    	string helloNull()
    }

        这是应用IDL描述性语言编写的Thrift文件,包括了5个方法,每一个方法包括一个方法名,参数列表和返回类型。每一个参数包括参数序号,参数类型以及参数名。 Thrift 是对 IDL(Interface Definition Language) 描述性语言的一种详细实现。

        3、主动生成java代码

        将Hello.thrift文件和thrift-0.9.0.exe放置到相同目录下,即D:\Thrift,运行cmd,打开窗口命令行,定位到D:\Thrift

        执行命令:

    D:\Thrift>thrift-0.9.0.exe -gen java Hello.thrift

        此时会在D:\Thrift下生成一个目录gen-java,里面有Hello.java

        4、创建Java工程

        打开Eclipse或者Myeclipse,创建一个Java工程:Hello,导入刚才生成的Hello.java文件,同时新建一个自在文件夹,Thrift工程需要的jar包以及libthrift-0.9.0.jar放置到文件夹下,同时在Java Build Path中添加引用。

        5、编写接口

    import org.apache.thrift.TException;
    public class HelloServiceImpl implements Hello.Iface{
    	public boolean helloBoolean(boolean para) throws TException{
    		return para;
    	}
    	public int helloInt(int para) throws TException{
    		try {
    			Thread.sleep(20000);
    		} catch (InterruptedException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return para;
    	}
    	
    	public String helloNull() throws TException{
    		return null;
    	}
    	
    	public String helloString(String para) throws TException{
    		return para;
    	}
    	
    	public void helloVoid() throws TException{
    		System.out.println("Hello World!");
    	}
    
    }

        接口实现Thrift定义文件中的服务。

        6、编写服务器端

        每日一道理
    只有启程,才会到达理想和目的地,只有拼搏,才会获得辉煌的成功,只有播种,才会有收获。只有追求,才会品味堂堂正正的人。
    import org.apache.thrift.TProcessor;
    import org.apache.thrift.protocol.TBinaryProtocol;
    import org.apache.thrift.protocol.TBinaryProtocol.Factory;
    import org.apache.thrift.server.TServer;
    import org.apache.thrift.server.TSimpleServer;
    import org.apache.thrift.server.TThreadPoolServer;
    import org.apache.thrift.server.TThreadPoolServer.Args;
    import org.apache.thrift.transport.TServerSocket;
    import org.apache.thrift.transport.TServerTransport;
    import org.apache.thrift.transport.TTransportException;
    
    public class HelloServiceServer {
    	/**
    	 * 启动thrift服务器
    	 * @param args
    	 */
    	public static void main(String[] args) {		
    		try{
    		//设置服务器端口为7911
    		TServerSocket serverTransport = new TServerSocket(7911);
    		//设置协议工厂为TBinaryProtocol.Factory
    		Factory proFactory = new TBinaryProtocol.Factory();
    		//关联处理器与Hello服务的实现
    		TProcessor processor = new Hello.Processor<Hello.Iface>(new HelloServiceImpl());
    		TServer.Args tArgs = new TServer.Args(serverTransport);
    		tArgs.processor(processor);
    		tArgs.protocolFactory(proFactory);
    		//应用TSimpleServer
    		TServer server = new TSimpleServer(tArgs);
    		System.out.println("Start server on port 7911....");
    		server.serve();
    		}catch(TTransportException e){
    			e.printStackTrace();
    		}		
    		/*
    		try{
    			//设置服务器端口为7911
    			TServerSocket serverTransport = new TServerSocket(7911);
    			//设置协议工厂为TBinaryProtocol.Factory
    			Factory proFactory = new TBinaryProtocol.Factory();
    			//关联处理器与Hello服务的实现
    			TProcessor processor = new Hello.Processor<Hello.Iface>(new HelloServiceImpl());
    			Args tArgs = new Args(serverTransport);
    			tArgs.processor(processor);
    			tArgs.protocolFactory(proFactory);
    			TServer server = new TThreadPoolServer(tArgs);
    			System.out.println("Start server on port 7911....");
    			server.serve();
    			TServerTransport s = new TServerSocket(11);			
    			}catch(TTransportException e){
    				e.printStackTrace();
    			}
    			*/
    	}
    
    }

        7、编写客户端

    import org.apache.thrift.TException;
    import org.apache.thrift.protocol.TBinaryProtocol;
    import org.apache.thrift.protocol.TProtocol;
    import org.apache.thrift.transport.TSocket;
    import org.apache.thrift.transport.TTransport;
    import org.apache.thrift.transport.TTransportException;
    
    public class HelloServiceClient {
    	/**
    	 * 调用Hello服务
    	 * @param args
    	 */
    	public static void main(String[] args) {				
    		try {
    			//设置调用的服务器为本地,端口为7911
    			TTransport transport = new TSocket("localhost", 7911);
    			transport.open();
    			//设置传输协议为TBinaryProtocol
    			TProtocol protocol = new TBinaryProtocol(transport);
    			Hello.Client client = new Hello.Client(protocol);
    			client.helloVoid();
    			transport.close();
    			
    		} catch (TTransportException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (TException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    
    }

        8、运行

        先运行服务器端,再运行客户端。

        失掉:

    Start server on port 7911....
    Hello World!

    文章结束给大家分享下程序员的一些笑话语录: 据说有一位软件工程师,一位硬件工程师和一位项目经理同坐车参加研讨会。不幸在从盘山公路下山时坏在半路上了。于是两位工程师和一位经理就如何修车的问题展开了讨论。
    硬件工程师说:“我可以用随身携带的瑞士军刀把车坏的部分拆下来,找出原因,排除故障。”
    项目经理说:“根据经营管理学,应该召开会议,根据问题现状写出需求报告,制订计划,编写日程安排,逐步逼近,alpha测试,beta1测试和beta2测试解决问题。”
    软件工程说:“咱们还是应该把车推回山顶再开下来,看看问题是否重复发生。”

  • 相关阅读:
    怎样不重启设置字体边缘平滑立即生效! 以下注册表导入后不能立即生效。。
    Delphi下实现全屏快速找图找色 一、数据提取
    delphi2006语言新特性:Record类型高级用法
    delphi之模糊找图
    delphi之精确找图
    delphi2006语言新特性——类静态字段、类属性
    Delphi程序开启XP的ClearType显示效果
    delphi Createthread的线程传参数
    修改窗体非客户区大小更改窗体标题栏高度
    windows 匿名管道读取子进程输出
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3089725.html
Copyright © 2020-2023  润新知