zoukankan      html  css  js  c++  java
  • Thrift使用实例

    首先下载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<AsyncClient.say_call> 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<Client> {
          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);
          }
        }
        ...................省略(详细看自己的生成代码)

     先写一个Server类:
    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.Processor<Iface> processor = new sayThriftService.Processor<Iface>(server1);
                    Args arg = new Args(serverTransport) {
    		}.protocolFactory(proFactory).processor(processor);
    		server = new TThreadPoolServer(arg);
    		//启动服务(先启动这个类,然后启动client类)
    		server.serve();
    	}
    }
    

    client客户端类
    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。
  • 相关阅读:
    [buuctf] pwn-第五空间2019pwn
    [buuctf] pwn-[OGeek2019]babyrop
    [buuctf] pwn-ciscn_2019_c_1
    [buuctf] pwn-jarvisoj_level0
    wamp集成环境配置php7.x连接mssql
    EXCEL小技巧之单击单元格实现自增
    Asuhe博客转移
    数据链路层中的最小帧长是如何计算出来的?
    CSMA/CD协议中如何确定数据重传时机?
    Cache设计
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5211060.html
Copyright © 2011-2022 走看看