thrift教程中提供了客户端和服务端的简单实现。

Client

      
      TTransport transport;
      if (args[0].contains("simple")) {
	    //socket通信
        transport = new TSocket("localhost", 9090);
        transport.open();
      }
      else {
        TSSLTransportParameters params = new TSSLTransportParameters();
        params.setTrustStore("../../lib/java/test/.truststore", "thrift", "SunX509", "JKS");
        //加密的通信方式
        transport = TSSLTransportFactory.getClientSocket("localhost", 9091, 0, params);
      }
      //定义数据传输协议并绑定transport
      TProtocol protocol = new  TBinaryProtocol(transport);
	  //使用transport创建客户端
      Calculator.Client client = new Calculator.Client(protocol);
	  //使用生成的client进行调用
      perform(client);
      //关闭transport
      transport.close();

对定义的thrift文件,会有一个Iface接口内部是所有接口的定义,Client就实现了这个生成的接口
比如有一个方法public String aaa(String param)
在Client的实现中就会有

    public Obj aaa(String name) throws org.apache.thrift.TException
    {
      send_aaa(name);
      return recv_aaa();
    }

send_XXX的方法会使用构造时传入的protocol进行write,recv_XXX方法会使用构造传入的protocol进行读取并组装到返回结果中,这里发送和传输的protocol是一样的,但是可以手动继承生成的Client类使用不同的protocol

Server

这里只看下simple的server


  public static CalculatorHandler handler;
  public static Calculator.Processor processor;
  
  public static void simple(Calculator.Processor processor) {
    try {
	  //自定义的实现
	  handler = new CalculatorHandler();
	  //注册handler到processor中
      processor = new Calculator.Processor(handler);

	  //定义Socket通讯方式的ServerTransport(和TTransport不同)
      TServerTransport serverTransport = new TServerSocket(9090);
	  //创建server,这里只注册了ServerTransport,TTransport和TProtocol都使用默认(TServerTransport对应的TTransport 和 TBinaryProtocol),并注册processor
      TServer server = new TSimpleServer(new Args(serverTransport).processor(processor));

      // 多线程server
      // TServer server = new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport).processor(processor));

      System.out.println("Starting the simple server...");
	  //启动server
      server.serve();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

在server的serve方法中会监听TServerTransport,当接受到消息时会调用processor的各个方法的getResult方法进行处理,再写回结果。