Thrift Server與Client

thrift教程中提供了客戶端和服務端的簡單實現。java

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的實現中就會有apache

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的serversocket

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方法進行處理,再寫回結果。ui

相關文章
相關標籤/搜索