首先下载thrift.exe,和对应lib包。注意版本一定要一致。 否则编译会不识别出现错误。
可能会出现org.slf4j这个错误,那么你要把slf4j-api.jar下载下来引入到你的project中
namespace java com.nerd.thrift.service/** * */service sayThriftService{void say();}通过在命令行中转到 thrift-1.8.0.exe -gen java sayThriftService 在磁盘目录中(com.nerd.thrift.service)可发现这个脚本对应的java代码 例如以下:
public class sayThriftService { /** * */ public interface Iface { public void say() throws org.apache.thrift.TException; } public interface AsyncIface { public void say(org.apache.thrift.async.AsyncMethodCallback先写一个Server类:resultHandler) throws org.apache.thrift.TException; } public static class Client extends org.apache.thrift.TServiceClient implements Iface { public static class Factory implements org.apache.thrift.TServiceClientFactory { public Factory() {} public Client getClient(org.apache.thrift.protocol.TProtocol prot) { return new Client(prot); } public Client getClient(org.apache.thrift.protocol.TProtocol iprot, org.apache.thrift.protocol.TProtocol oprot) { return new Client(iprot, oprot); } } ...................省略(详细看自己的生成代码)
package com.nerd.clq;import org.apache.thrift.TException;import org.apache.thrift.TProcessor;import org.apache.thrift.protocol.TBinaryProtocol;import org.apache.thrift.protocol.TProtocolFactory;import org.apache.thrift.server.TServer;import org.apache.thrift.server.TThreadPoolServer;import org.apache.thrift.server.TThreadPoolServer.Args;import org.apache.thrift.transport.TServerSocket;import com.nerd.clq.thrift.sayThriftService;import com.nerd.clq.thrift.sayThriftService.Iface;public class Server implements sayThriftService.Iface{ private static TServer server; @Override public void say() throws TException { System.out.println(System.currentTimeMillis()); } public static void main(String[] args) throws TException { Server server1 = new Server(); TServerSocket serverTransport = new TServerSocket(8080); TProtocolFactory proFactory = new TBinaryProtocol.Factory(); sayThriftService.Processorclient客户端类processor = new sayThriftService.Processor (server1); Args arg = new Args(serverTransport) { }.protocolFactory(proFactory).processor(processor); server = new TThreadPoolServer(arg); //启动服务(先启动这个类,然后启动client类) server.serve(); }}
package com.nerd.clq;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 com.nerd.clq.thrift.sayThriftService;public class Client { public static void main(String[] args) throws TException { TTransport transport = new TSocket("localhost", 8080); TProtocol protocol = new TBinaryProtocol(transport); sayThriftService.Client client = new sayThriftService.Client(protocol); transport.open(); client.say(); transport.close(); } }
server编写的一般步骤: 1. 创建Handler 2. 基于Handler创建Processor 3. 创建Transport 4. 创建Protocol方式 5. 基于Processor, Transport和Protocol创建Server 6. 执行Server
client编写的一般步骤: 1. 创建Transport 2. 创建Protocol方式 3. 基于Transport和Protocol创建Client 4. 执行Client的方法
创建Transport的时候。一般都须要创建对应的Socket。