• Thrift Server与Client


    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方法进行处理,再写回结果。

  • 相关阅读:
    Deepin安装Python开发环境
    Deepin怎样安装C/C++编译环境更好
    当 tcpdump -w 遇到 Permission denied
    c++中的虚函数
    c++中的new 和delete
    ubuntu没有输入窗口,不能调用输入法
    Ubuntu下升级VisualBox后无法启动 Kernel driver not installed (rc=-1908)
    BCD与GRUB
    adb shell device not found解决
    unsupported number of arguments...的错误
  • 原文地址:https://www.cnblogs.com/resentment/p/7498713.html
Copyright © 2020-2023  润新知