使用Mac编写Thirft的HelloWorld项目-创新互联-成都快上网建站

使用Mac编写Thirft的HelloWorld项目-创新互联

前言

最近在hive新增Thirft接口,于是学习了一下Thirft的使用

十多年的祁县网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站的优势是能够根据用户设备显示端的尺寸不同,自动调整祁县建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“祁县网站设计”,“祁县网站推广”以来,每个客户项目都认真落实执行。步骤 准备工作
  1. brew install thrift安装thrift
  2. 创建maven项目并引入依赖
org.apache.thriftlibthrift0.12.0
  1. 根据thrift文件生成java基类

在resource下创建一个hello.thrift文件

namespace java service.demo
service service.demo.HelloWorld{string sayHello(1: string param)
}

进入resource,thrift -r -gen java hello.thrift会在当前路径创建出一个gen-java.service.demo的文件夹。文件夹下面有Hello.java文件,将其移动到main目录的service.demo包中
在这里插入图片描述

编写Java实现
  1. 实现IFace接口
package service.demo;

import org.apache.thrift.TException;
public class HelloWorldIfaceImpl implements HelloWorld.Iface {public String sayHello(String param) throws TException {return "hello! "+ param;
    }
}
  1. 构建服务端并启动
package service.demo;

import org.apache.thrift.TProcessor;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TSimpleServer;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TTransportException;


public class HelloWorldServer {public static void main(String[] args) {try {System.out.println("Server Starting....");
            // TServer的参数,并添加需要的处理过程和协议
            TServer.Args tArgs = new TServer.Args(new TServerSocket(666));
            // 1.过程
            TProcessor tprocessor = new HelloWorld.Processor(new HelloWorldIfaceImpl()); // 构造server的处理过程
            tArgs.processor(tprocessor);
            // 2.协议
            tArgs.protocolFactory(new TBinaryProtocol.Factory()); // 选用Protocol协议
            // 构建server并启动
            TServer server = new TSimpleServer(tArgs);
            server.serve();
        }catch (TTransportException e) {e.printStackTrace();
        }
    }
}

启动后,开源看到日志输出
在这里插入图片描述
3. 创建客户端并访问服务端

package service.demo;

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 org.apache.thrift.transport.TTransportException;

public class HelloWorldClient {public static void main(String[] args) {System.out.println("Client starting....");
        TTransport transport = null;
        try {// 绑定通信端口
            transport = new TSocket("localhost", 666, 30000);
            transport.open();
            // 构建协议,注意和服务端一致
            TProtocol protocol = new TBinaryProtocol(transport);
            // 创建客户端
            HelloWorld.Client client = new HelloWorld.Client(protocol);
          	// 客户端请求服务端,获得结果并输出
            String result = client.sayHello("Spider-Man");
            System.out.println(result);
        } catch (TTransportException e) {e.printStackTrace();
        } catch (TException e) {e.printStackTrace();
        } finally {if (null != transport) {transport.close();
            }
        }
    }
}

运行后成功拿到结果
在这里插入图片描述

总结 Server

负责连接调度、服务的生命周期,定义接口是TServer

  • TSimpleServer:简单的阻塞服务端
  • TThreadPoolServer:使用线程池的处理请求的阻塞服务端
  • THsHaServer:使用线程池处理请求的基于 NIO 的非阻塞服务端
  • TThreadedSelectorServer:使用多种线程池的基于 NIO 的非阻塞服务端
Processor

处理请求,具体的实现由生成的代码处理,定义接口是 TProcessor

  • TBaseProcessor:同步处理的 Processor
  • TBaseAsyncProcessor:异步处理的 Processor
  • TMultiplexedProcessor:支持多个服务的同步 Processor
Protocol

请求协议,数据的编解码实现,定义接口是 TProtocol

  • TBinaryProtocol:二进制协议
  • TCompactProtocol:压缩协议
  • TJSONProtocol:JSON 格式协议
  • TMultiplexedProtocol:支持多个 Processor 的封装协议,依赖于其他协议
Transport

底层的连接,提供了读写的抽象实现;服务端定义是 TServerTransport

  • TServerSocket: 基于 ServerSocket 的服务端 Transport
  • TNonblockingServerSocket:基于 ServerSocketChannel 的服务端 Transport
  • TSaslTransport:支持 SSL 加密的 Transport

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站栏目:使用Mac编写Thirft的HelloWorld项目-创新互联
分享URL:http://kswjz.com/article/dspods.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流