一、java实例

1.下载与安装thrift工具

http://thrift.apache.org/download/

、服务器代码

服务Test实现类

package com.zychen.thrift;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.thrift.TException;

public class TestImpl implements Test.Iface {

	public void Init(){
		int n = 0;
		for(n=0; n<10; n++){
			User user = new User();
			user.setId(n+1);
			user.setName(String.format("name_%d", n+1));
			user.setAge(18+n+1);
			user.setVip(true);
			listUser.add(user);
		}
	}

	@Override
	public int add(int a, int b) throws TException {
		return a+b;
	}

	@Override
	public User getById(long id) throws TException {
		User userObj = null;
		Iterator<User> iter = listUser.iterator();
		while(iter.hasNext()){
			userObj = iter.next();
			if(userObj.getId() == id){
				return userObj;
			}
		}

		return null;
	}

	//插入用户信息
	void InsertUser(User user){
		listUser.add(user);
	}

	protected List<User> listUser = new ArrayList<User>();
}

//服务端代码

package com.zychen.test;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TBinaryProtocol.Factory;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.server.TNonblockingServer;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TThreadPoolServer;
import org.apache.thrift.server.TThreadPoolServer.Args;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TNonblockingServerSocket;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TTransportException;

import com.zychen.thrift.Test;
import com.zychen.thrift.Test.Processor;
import com.zychen.thrift.TestImpl;

public class Server {
	//阻塞式IO
	public void startOIOServer() {
        try {
            TServerSocket serverTransport = new TServerSocket(1234);
            TestImpl testImpl = new TestImpl();
            testImpl.Init();
            Test.Processor process = new Processor(testImpl);
            Factory portFactory = new TBinaryProtocol.Factory(true, true);
            Args args = new Args(serverTransport);
            args.processor(process);
            args.protocolFactory(portFactory);
            TServer server = new TThreadPoolServer(args);
            System.out.println("init...");
            server.serve();
        } catch (TTransportException e) {
            e.printStackTrace();
        }
    }

	//使用非阻塞式IO,服务端和客户端需要指定TFramedTransport数据传输的方式。
	public void startNIOServer() {
        try {
            TestImpl testImpl = new TestImpl();
            testImpl.Init();
            Test.Processor tprocessor = new Processor(testImpl);
            TNonblockingServerSocket tnbServerTransport = new TNonblockingServerSocket(1234);
            TNonblockingServer.Args tArgs = new TNonblockingServer.Args(tnbServerTransport);
            tArgs.processor(tprocessor);
            tArgs.transportFactory(new TFramedTransport.Factory());
            tArgs.protocolFactory(new TCompactProtocol.Factory());
            TServer server = new TNonblockingServer(tArgs);
            System.out.println("init...");
            server.serve();
        }catch(TTransportException e) {
        	e.printStackTrace();
        }
    }

	/**
	 * @param args
	 */
	public static void main(String[] args) {
	     Server server = new Server();
	     //server.startOIOServer();
	     server.startNIOServer();
	}

}

依赖jar包

5、客户端代码

package com.zychen.test;

import org.apache.thrift.TApplicationException;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;

import com.zychen.thrift.Test;
import com.zychen.thrift.User;

public class Client {

	 //阻塞io
	 public void startOIOClient() {
	        TTransport transport;
	        try {
	            transport = new TSocket("localhost", 1234);
	            TProtocol protocol = new TBinaryProtocol(transport);
	            Test.Client client = new Test.Client(protocol);
	            transport.open();
	            int nResult = client.add(100, 200);
	            String strTemp = String.format("client.add(100, 200) = %d", nResult);
	            System.out.println(strTemp);
	            User u1 = client.getById(1);
	            if(u1 != null){
	            	System.out.println(u1.getName());
	            }
	            User u2 = client.getById(11);
	            if(u2 == null){
	            	System.out.println("null");
	            }
	            u2 = client.getById(9);
	            transport.close();
	        } catch (TTransportException e) {
	            e.printStackTrace();
	        } catch (TException e) {
	        	if(e instanceof TApplicationException && ((TApplicationException) e).getType() == TApplicationException.MISSING_RESULT){
	        		System.out.println("Theresult of Method function is NULL");
	        	}else{
		            e.printStackTrace();
	        	}
	        }
	    }

	 //非阻塞io
	 public void startNIOClient() {
	        TTransport transport;
	        try {
	            transport = new TFramedTransport(new TSocket("localhost", 1234,30000));
	            TProtocol protocol = new TCompactProtocol(transport);
	            Test.Client client = new Test.Client(protocol);
	            transport.open();
	            int nResult = client.add(100, 200);
	            String strTemp = String.format("client.add(100, 200) = %d", nResult);
	            System.out.println(strTemp);
	            User u1 = client.getById(1);
	            if(u1 != null){
	            	System.out.println(u1.getName());
	            }
	            User u2 = client.getById(11);
	            if(u2 == null){
	            	System.out.println("null");
	            }
	            u2 = client.getById(9);
	            transport.close();
	        } catch (TTransportException e) {
	            e.printStackTrace();
	        } catch (TException e) {
	        	if(e instanceof TApplicationException && ((TApplicationException) e).getType() == TApplicationException.MISSING_RESULT){
	        		System.out.println("Theresult of Method function is NULL");
	        	}else{
		            e.printStackTrace();
	        	}
	        }
	    }

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        Client client = new Client();
        //client.startOIOClient();
        client.startNIOClient();
	}

}

依赖jar包

二、Thrift-0.9.3 jar包编译生成。

1、myeclipse新建一个java工程。

2、打开thrift目录,查找到thrift-0.9.3\thrift-0.9.3\lib\java\src,将这个src目录下的代码拷贝到工程目录下。

3、引入httpClient、httpcore、javax.servlet、slf4j.api jar包。如图:

4、编译,导出thrift-0.9.3jar包,导出时选择Exportall output folders for checked projects,否则scheme类无法导出到jar包中。

Thrift之java实例的更多相关文章

  1. Thrift-java实例

    ➠更多技术干货请戳:听云博客 Thrift实例1 功能描述:客户端与服务器端分别是两个应用,先启动服务器端,再启动客户端,实现执行客户端运行服务器端的加法方法. 源码截图(源码在附件中): 客户端: ...

  2. Thrift入门及Java实例演示<转载备用>

    Thrift入门及Java实例演示 作者: Michael 日期: 年 月 日 •概述 •下载配置 •基本概念 .数据类型 .服务端编码基本步骤 .客户端编码基本步骤 .数据传输协议 •实例演示(ja ...

  3. Apache Thrift学习之一(入门及Java实例演示)

    目录: 概述 下载配置 基本概念 数据类型 服务端编码基本步骤 客户端编码基本步骤 数据传输协议 实例演示(java) thrift生成代码 实现接口Iface TSimpleServer服务模型 T ...

  4. Apache Thrift with Java Quickstart(thrift入门及Java实例)

    thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl ...

  5. Protocol Buffer技术详解(Java实例)

    Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发 ...

  6. 吐槽net下没有靠谱的FastDFS的sdk之使用thrift实现JAVA和C#互通

    事情是这样的,在一个新项目中引入了fastdfs,用这玩意做一些小数据的存储还是很方便的,然后在nuget上就找一个对接FastDFS的sdk,如下图: 一眼就看到了这个top1的sdk,应该会比较靠 ...

  7. JAVA实例

     JAVA实例1  1 package Demo3; import java.io.File; import java.io.FileReader; import java.io.IOExceptio ...

  8. Java 实例 - 如何执行指定class文件目录(classpath) Java 实例 J

    Java 实例 - 如何执行指定class文件目录(classpath)  Java 实例 如果我们 Java 编译后的class文件不在当前目录,我们可以使用 -classpath 来指定class ...

  9. Java-Runoob-高级教程-实例-方法:15. Java 实例 – 重载(overloading)方法中使用 Varargs

    ylbtech-Java-Runoob-高级教程-实例-方法:15. Java 实例 – 重载(overloading)方法中使用 Varargs 1.返回顶部 1. Java 实例 - 重载(ove ...

随机推荐

  1. 前端基础之jQuery(Day55)

    阅读目录 一 jQuery是什么? 二 什么是jQuery对象? 三 寻找元素(选择器和筛选器) 四 操作元素(属性,css,文档处理) 扩展方法 (插件机制) 一. jQuery是什么? [1]   ...

  2. selenium的下拉选择框

    今天总结下selenium的下拉选择框.我们通常会遇到两种下拉框,一种使用的是html的标签select,另一种是使用input标签做的假下拉框. 后者我们通常的处理方式与其他的元素类似,点击或使用J ...

  3. msys2安装开发工具

    pacman -Syupacman -Supacman -S base-develpacman -S mingw-w64-x86_64-toolchain

  4. SQL语句2

    1. SELECT * FROM Persons WHERE City NOT LIKE '%lon%' 2. SELECT * FROM Persons WHERE FirstName LIKE ' ...

  5. 笔记——Springboot response、ServletOutputStream、图形验证码显示慢

    今天遇到一个图形验证码加载很慢的问题,大概耗时有200~500毫秒左右. 根据追踪,图形验证码图片生成耗时0~1毫秒,而response.getOutputStream.write()将图片写入前台页 ...

  6. 防火墙之地址转换SNAT DNAT

    一.SNAT源地址转换. 1.原理:在路由器后(PSOTROUTING)将内网的ip地址修改为外网网卡的ip地址. 2.应用场景:共享内部主机上网. 3.设置SNAT:网关主机进行设置. (1)设置i ...

  7. 20165101刘天野 2018-2019-2《网络对抗技术》Exp3 免杀原理与实践

    20165101刘天野 2018-2019-2<网络对抗技术>Exp3 免杀原理与实践 1. 实践内容 1.1 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil- ...

  8. Gentoo系统安装步骤详解

    下载镜像 一般我都是用国内的镜像源,不管是centos,ubuntu还是gentoo在国内的镜像来说肯定比国外快 #下载地址mirrors.163.com/gentoo/#我用的x86的http:// ...

  9. java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]

    1.问题描述: 对于创建的springboot项目,通过启动类启动,访问没问题,但打成war部署到tomcat上启动报错,如下: 严重: ContainerBase.addChild: start: ...

  10. 超详细 Linux 下编译安装Redis 以及php配套使用

    一.Linux 下安装Redis 下载地址:http://redis.io/download,下载最新文档版本. 把鼠标移到上图的绿色框上,就会显示下图提示:(直接右键复制链接就好) 本教程使用的旧版 ...