Thrift之java实例
一、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实例的更多相关文章
- Thrift-java实例
➠更多技术干货请戳:听云博客 Thrift实例1 功能描述:客户端与服务器端分别是两个应用,先启动服务器端,再启动客户端,实现执行客户端运行服务器端的加法方法. 源码截图(源码在附件中): 客户端: ...
- Thrift入门及Java实例演示<转载备用>
Thrift入门及Java实例演示 作者: Michael 日期: 年 月 日 •概述 •下载配置 •基本概念 .数据类型 .服务端编码基本步骤 .客户端编码基本步骤 .数据传输协议 •实例演示(ja ...
- Apache Thrift学习之一(入门及Java实例演示)
目录: 概述 下载配置 基本概念 数据类型 服务端编码基本步骤 客户端编码基本步骤 数据传输协议 实例演示(java) thrift生成代码 实现接口Iface TSimpleServer服务模型 T ...
- Apache Thrift with Java Quickstart(thrift入门及Java实例)
thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl ...
- Protocol Buffer技术详解(Java实例)
Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发 ...
- 吐槽net下没有靠谱的FastDFS的sdk之使用thrift实现JAVA和C#互通
事情是这样的,在一个新项目中引入了fastdfs,用这玩意做一些小数据的存储还是很方便的,然后在nuget上就找一个对接FastDFS的sdk,如下图: 一眼就看到了这个top1的sdk,应该会比较靠 ...
- JAVA实例
JAVA实例1 1 package Demo3; import java.io.File; import java.io.FileReader; import java.io.IOExceptio ...
- Java 实例 - 如何执行指定class文件目录(classpath) Java 实例 J
Java 实例 - 如何执行指定class文件目录(classpath) Java 实例 如果我们 Java 编译后的class文件不在当前目录,我们可以使用 -classpath 来指定class ...
- Java-Runoob-高级教程-实例-方法:15. Java 实例 – 重载(overloading)方法中使用 Varargs
ylbtech-Java-Runoob-高级教程-实例-方法:15. Java 实例 – 重载(overloading)方法中使用 Varargs 1.返回顶部 1. Java 实例 - 重载(ove ...
随机推荐
- Mahout介绍-炼数
Mahout的中文含义:象夫
- iOS数据存储到本地的几种方法
A,归档解档(多针对于模型或者数组,利用MJExtension) 1,先在model里的.m文件写上MJCodingImplementation 2,再进行模型归档: #define APP_DOCU ...
- cdojQ - 昊昊爱运动 II
地址:http://acm.uestc.edu.cn/#/contest/show/95 题目: Q - 昊昊爱运动 II Time Limit: 3000/1000MS (Java/Others) ...
- 002. MySQL复制操作
#### 1.Setting the Replication Master Configuration On a replication master, you must enable binary ...
- HCNP学习笔记之TCP中FLAGS字段SYN, FIN, ACK, PSH, RST, URG
在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段. 含义: SYN 表示建立连接, ...
- 【Flask】Flask-Migrate基本使用
# flask_migrate笔记:在实际的开发环境中,经常会发生数据库修改的行为.一般我们修改数据库不会直接手动的去修改,而是去修改ORM对应的模型,然后再把模型映射到数据库中.这时候如果有一个工具 ...
- 轮询、长轮询、长连接、socket连接、WebSocket
轮询:客户端定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息并关闭连接. 优点:后端程序编写比较容易. 缺点:请求中有大半是无用,浪费带宽和服务器资源.(而每一次的 HTTP 请求和应答 ...
- ubuntu 安装pip
apt-get install python3-pip
- jdbc封装代码
jdbc封装代码 package jdbcUtil; import java.sql.Connection; import java.sql.DriverManager; import java.sq ...
- com.android.tools.build:gradle:X.XX.XX:gradle.jar 插件无法下载问题
在使用Android Studio 这个IDE时,出现com.android.tools.build:gradle:X.XX.XX:gradle.jar 插件无法下载问题 可能的原因就是网速不好或者依 ...