仅供查考学些,下面链接有该文章的所有项目源代码、thirft-0.9.2.exe和所需的jar包
一、thrift简介
Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 等等编程语言间无缝结合的、高效的服务。
thrift允许你定义一个简单的定义文件中的数据类型和服务接口。以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言。
二、thirft之java使用示例
下面将通过一个简单的项目演示thrift的使用
1、通过thirft-0.9.2.exe将下面的test.thrift文件转成相应的java文件。打开dos窗口指定到thirft-0.9.2.exe所在目录。运行thrift-0.9.2.exe -r -gen java test.thrift。得到ClassName.java文件。将文件放到testThrift项目的com.sd.test.thrift包下
namespace java com.sd.test.thrift
service ClassName{
string implMathedName(1:string username)
}
ClassName为要建立的类名,implMathedName为接口方法名(在ClassName中该方法未实现)
2、创建TestImpl类,实现implMathedName方法
package com.sd.test.thrift;
public class TestImpl implements ClassName.Iface{
public String implMathedName(String username){
//System.out.println("Hello!"+username+",you are right.");
return "Hello!"+username+",you are right.";
}
}
3.建立一个简单的单线程服务模型TestSimpleService.java
package com.sd.test.thrift;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TSimpleServer;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TTransportException;
//单线程服务模型
public class TestSimpleService {
public static final int SERVER_PORT=8090;
public void startServer(){
System.out.println("Hello single thread start...");
//TProcessor tprocessor = new MyHelloService.Processor<MyHelloService.Iface>(new SayHelloImpl());
//接口处理器
ClassName.Processor<ClassName.Iface> tprocessor =new ClassName.Processor<ClassName.Iface>(new TestImpl());
//简单的单线程服务模型,一般用于测试
try {
//服务器端口设置
TServerSocket serverTransport=new TServerSocket(SERVER_PORT);
//服务器传输设置
TServer.Args tArgs=new TServer.Args(serverTransport);
//服务器处理器设置。。。。。这里为上面接口接口处理器(是否可理解为将接口处理器放到服务器上去或者说是将服务器处理器与接口处理器对应起来)
tArgs.processor(tprocessor);
//设定服务器传输协议
tArgs.protocolFactory(new TBinaryProtocol.Factory());
// tArgs.protocolFactory(new TCompactProtocol.Factory());
// tArgs.protocolFactory(new TJSONProtocol.Factory());
//创建服务对象
TServer server=new TSimpleServer(tArgs);
//启动服务
server.serve();
} catch (TTransportException e) {
// TODO Auto-generated catch block
System.out.println("Server start error!!!");
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args){
TestSimpleService server=new TestSimpleService();
server.startServer();
}
}
4、编写客户端Client代码。建立TestClient.java
package com.sd.test.thrift;
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 TestClient {
public static final String SERVER_IP="localhost";
public static final int SERVER_PORT=8090;
public static final int TIMEOUT=3000;
/**
* @param userName
*/
public void startClient(String userName){
TTransport transport=null;
try{
transport =new TSocket(SERVER_IP,SERVER_PORT,TIMEOUT);
//协议要和服务端一致
//二进制传输协议
TProtocol protocol=new TBinaryProtocol(transport);
//压缩传输协议
//TProtocol protocol = new TCompactProtocol(transport);
//json传输协议
// TProtocol protocol = new TJSONProtocol(transport);
//接口处理类的设定传输协议
ClassName.Client client=new ClassName.Client(protocol);
//客户端开启传输
transport.open();
//调用接口处理类MyHelloService.client的sayHello(调用接口并返回string值)
String result=client.implMathedName(userName);
System.out.println("Thrify client result =: " + result);
}catch (TTransportException e) {
e.printStackTrace();
} catch (TException e) {
e.printStackTrace();
} finally {
if (null != transport) {
transport.close();
}
}
}
public static void main(String[] args){
TestClient client=new TestClient();
client.startClient("sd");
}
}