Thrift的服务器创建
1.添加如下图的jar,没有jar,可到官网或者http://mvnrepository.com/下载
2.将(一)中生成的ThriftJava文件拷贝到项目源文件目录下,实现IUserService.Iface接口
package cn.huikey.thrift.dao;
import java.util.ArrayList;
public class IUserServiceImpl implements Iface{
@Override
public void add(User user) throws TException {
System.out.println(user);
// System.out.println("IUserServiceImpl.add()");
}
@Override
public void deleteById(int id) throws TException {
System.out.println("IUserServiceImpl.deleteById()");
}
@Override
public void updateById(User user) throws TException {
System.out.println("IUserServiceImpl.updateById()");
}
@Override
public User findById(int id) throws TException {
System.out.println("IUserServiceImpl.findById()");
return null;
}
@Override
public List<User> findAll() throws TException {
System.out.println("IUserServiceImpl.findAll()");
List<User> list=new ArrayList<User>();
list.add(new User(2, "admin"));
return list;
}
}
3.编写Server端
package cn.huikey.thrift.server;
import java.io.IOException;
public class ThriftServer {
public static void main(String[] args) throws TTransportException, IOException {
// (1)支持的传输格式
// TBinaryProtocol – 二进制格式.
// TCompactProtocol – 压缩格式
// TJSONProtocol – JSON格式
// TSimpleJSONProtocol –提供JSON只写协议, 生成的文件很容易通过脚本语言解析。
// TDebugProtocol – 使用易懂的可读的文本格式,以便于debug
// (2) 支持的数据传输方式
// TSocket -阻塞式socker
// TFramedTransport – 以frame为单位进行传输,非阻塞式服务中使用。
// TFileTransport – 以文件形式进行传输。
// TMemoryTransport – 将内存用于I/O. java实现时内部实际使用了简单的ByteArrayOutputStream。
// TZlibTransport – 使用zlib进行压缩, 与其他传输方式联合使用。当前无java实现。
// (3)支持的服务模型
// TSimpleServer – 简单的单线程服务模型,常用于测试
// TThreadPoolServer – 多线程服务模型,使用标准的阻塞式IO。
// TNonblockingServer – 多线程服务模型,使用非阻塞式IO(需使用TFramedTransport数据传输方式)
// 创建处理器
IUserService.Processor<IUserServiceImpl> processor = new IUserService.Processor<IUserServiceImpl>(
new IUserServiceImpl());
// 创建传输对象
TServerTransport serverTransport = new TServerSocket(9090);
// 创建传输工厂,非阻塞
TTransportFactory transportFactory = new TFramedTransport.Factory();
// 创建协议工厂,二进制传输
TProtocolFactory protocolFactory = new TBinaryProtocol.Factory();
// 设置服务器参数
TThreadPoolServer.Args serverArgs = new TThreadPoolServer.Args(serverTransport);
// 设置处理器
serverArgs.processor(processor);
// 设置使用的协议
serverArgs.protocolFactory(protocolFactory);
// 设置使用的传输对象
serverArgs.transportFactory(transportFactory);
// 创建服务器
TServer server = new TThreadPoolServer(serverArgs);
System.out.println("Starting the simple server...");
server.serve();
}
}