Apache Thrift系列详解(二) - 网络服务模型

前言

Thrift提供的网络服务模型单线程多线程事件驱动,从另一个角度划分为:阻塞服务模型非阻塞服务模型

  • 阻塞服务模型:TSimpleServerTThreadPoolServer

  • 非阻塞服务模型:TNonblockingServerTHsHaServerTThreadedSelectorServer

TServer类的层次关系:


正文

TServer

TServer定义了静态内部类ArgsArgs继承自抽象类AbstractServerArgsAbstractServerArgs采用了建造者模式,向TServer提供各种工厂:

工厂属性 工厂类型 作用
ProcessorFactory TProcessorFactory 处理层工厂类,用于具体的TProcessor对象的创建
InputTransportFactory TTransportFactory 传输层输入工厂类,用于具体的TTransport对象的创建
OutputTransportFactory TTransportFactory 传输层输出工厂类,用于具体的TTransport对象的创建
InputProtocolFactory TProtocolFactory 协议层输入工厂类,用于具体的TProtocol对象的创建
OutputProtocolFactory TProtocolFactory 协议层输出工厂类,用于具体的TProtocol对象的创建

下面是TServer的部分核心代码:

public abstract class TServer {
    
    public static class Args extends org.apache.thrift.server.TServer.AbstractServerArgs<org.apache.thrift.server.TServer.Args> {
    
        public Args(TServerTransport transport) {
    
            super(transport);
        }
    }

    public static abstract class AbstractServerArgs<T extends org.apache.thrift.server.TServer.AbstractServerArgs<T>> {
    
        final TServerTransport serverTransport;
        TProcessorFactory processorFactory;
        TTransportFactory inputTransportFactory = new TTransportFactory();
        TTransportFactory outputTransportFactory = new TTransportFactory();
        TProtocolFactory inputProtocolFactory = new TBinaryProtocol.Factory();
        TProtocolFactory outputProtocolFactory = new TBinaryProtocol.Factory();

        public AbstractServerArgs(TServerTransport transport) {
    
            serverTransport = transport;
        }
    }

    protected TProcessorFactory processorFactory_;
    protected TServerTransport serverTransport_;
    protected TTransportFactory inputTransportFactory_;
    protected TTransportFactory outputTransportFactory_;
    protected TProtocolFactory inputProtocolFactory_;
    protected TProtocolFactory outputProtocolFactory_;
    private boolean isServing;

    protected TServer(org.apache.thrift.server.TServer.AbstractServerArgs args) {
    
        processorFactory_ = args.processorFactory;
        serverTransport_ = args.serverTransport;
        inputTransportFactory_ = args.inputTransportFactory;
        outputTransportFactory_ = args.outputTransportFactory;
        inputProtocolFactory_ = args.inputProtocolFactory;
        outputProtocolFactory_ = args.outputProtocolFactory;
    }

    public abstract void serve();
    public void stop() {
    }

    public boolean isServing() {
    
        return isServing;
    }

    protected void setServing(boolean serving) {
    
        isServing = serving;
    }
}

TServer的三个方法:serve()stop()isServing()serve()用于启动服务,stop()用于关闭服务,isServing()用于检测服务的起停状态。

TServer不同实现类的启动方式不一样,因此serve()定义为抽象方法。不是所有的服务都需要优雅的退出, 因此stop()方法没有被定义为抽象。


TSimpleServer

TSimpleServer工作模式采用最简单的阻塞IO,实现方法简洁明了,便于理解,但是一次只能接收和处理一个socket连接,效率比较低。它主要用于演示Thrift的工作过程,在实际开发过程中很少用到它。

(一) 工作流程

(二) 使用入门

服务端:

    ServerSocket serverSocket = new ServerSocket(ServerConfig.SERVER_PORT);
    TServerSocket serverTransport = new TServerSocket(serverSocket);
    HelloWorldService.Processor processor =
            new HelloWorldService.Processor<HelloWorldService.Iface>(new HelloWorldServiceImpl());
    TBinaryProtocol.Factory protocolFact
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值