• MINA学习之IoService


    从上一篇文章中知道,IoService出于MINA体系中的底层。IoService将会帮你维护网络交互,接受消息,发送消息,管理Sessions,管理连接Connections等等。

    IoService  是一个接口,服务端的IoAcceptor和客户端的IoConnector均继承了该接口。下面我们将分为以下几个部分介绍IoService

    1. IoService Introduction

    2. IoService Details

    3. IoAcceptor

    4. IoConnector

    IoService Introduction

    IoService在MINA中提供了基本的I/O 服务并且管理I/O 会话。它是在MINA体系中最重要的模块之一,Ioservice的实现及子接口,大部分操作的是底层的I/O操作。


    如上图,IoService有很多的职能:

    1. sessions的管理: 创建和删除sessions, 检查session的空闲状态

    2. 过滤连的管理: 管理过滤连,允许用户改变filter chain

    3. 回调:当有消息抵达时调用IOHandler

    4. 统计管理:统计更新消息的发送次数

    5. 监听管理:Manages the Listeners a suer can set up

    6. 传输管理: 处理服务端和客户端之间数据的传输

    IoService接口提供了以下方法:

    1. getTransportMetaData()--该方法返回IoAcceptor,IoConnector在运行时的元数据,包括运营商名称,连接的类型等

    2. addListener()--该方法为IoService添加一个IoServiceListener来侦听指定的事件

    3. removeListener()--该方法从IoService中移除指定的IoServiceListener

    4. isDisposing()--该方法返回IoService是否正在停止

    5. isDisposed()--该方法返回IoService是否已经停止

    6. dispose()--该方法用于释放IoService分配的所有资源

    7. getHandler()--获取该IoService所分配的IoHandler

    8. setHandler()--返回分配给该IoService的IoHandler

    9. getManagedSessions()--返回当前被IoService管理的所有Session的Map集合

    10. getManagedSessionCount()--返回当前被IoService管理的所有Session的大小

    11. getSessionConfig()--获取session的配置类

    12. getFilterChainBuilder()--返回FilterChain Builder,用于向已创建的session中加入新的Filter

    13. setFilterChainBuilder()--为IoService定义一个Filter Chain Builder

    14. getFilterChain()--获取当前的Filter Chain

    15. isActive()--返回IoService是否处于活动状态

    16. getActivationTime()--返回IoServcie被激活的时间

    17. broadcast()--将消息发送给所有被管理的Sessions

    18. setSessionDataStructureFactory()--

    19. getScheduledWriteBytes()--返回将要被发送的字节数

    20. getScheduledWriteMessages()--返回将要被发送的消息数

    21. getStatistics()--为IoService返回IoServiceStatistics对象


    IoService Details

    IoService被两个最重要的接口实现,分别是IoAcceptor, IoConnector。为了创建一个Server,需要实现IoAcceptor接口,为了创建一个Clinent,需要实现IoConnector接
    口。

    IoAcceptor

      该接口的命名由来是因其方法accept(),负责创建client和server之间的connection,服务端server接受connection请求。另外,我们可能命名这个接口为“Server”(在即将

    到来的MINA3.0中)。
      
      实现该接口的类有:

      1. NioSocketAcceptor:无阻塞(non-blocking)面向socket连接的IoAcceptor

      2. NIoDatagramAcceptor: 无阻塞(non-blocking) 面向udp连接的IoAcceptor

      3. AprSocketAcceptor:阻塞(blocking)socket连接的IoAcceptor,基于APR

      4. VmPipeSocketAcceptor:in-VM IoAcceptor

    下图展示IoAcceptor继承关系图

    1. creation:创建

        选择一个IoAcceptor类型,选择的依据是基于选择通讯的协议

    public TcpServer() throws IOException {
        // Create a TCP acceptor
        IoAcceptor acceptor = new NioSocketAcceptor();
    
        // Associate the acceptor to an IoHandler instance (your application)
        acceptor.setHandler(this);
    
        // Bind : this will start the server...
        acceptor.bind(new InetSocketAddress(PORT));
    
    
        System.out.println("Server started...");
    }

         2. disposal : 关闭

    IoAcceptor可通过调用dispose()来停止,该服务将会在当所有的sessions都被处理后停止。
    // Stop the service, waiting for the pending sessions to be inactive
    acceptor.dispose();

    同样你也可以通过传送一个参数true给dispose来实现等待所有线程正确执行完成后停止该service。

    // Stop the service, waiting for the processing session to be properly completed
    acceptor.dispose( true );

        3. status:状态

    你可通过调用一下方法获取IoAcceptor(IoService)的状态

    1. isActive() -  当IoService能接收请求时返回true

    2. isDisposing()- 如果dispose()方法被调用则返回true, 但并不表示IoService已经停止了(有可能有些sessions还在被处理)

    3. isDisposed()  - 如果dispose(true)方法被调用并且执行的线程已经完成时则返回true

       4. 管理IoHandler

    当一个IoService(IoAcceptor)被实例化后,可增加或获取IoHandler。调用方法:setHandler(IoHandler) 或 getHandler()

      5. 管理Filter Chain

    如果想管理过滤器链,可通过调用方法getFilterChain():

    // Add a logger filter
    DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
    chain.addLast("logger", new LoggingFilter());
    如果想在将Filter Chain 在将它设置给IoService之前创建,可以通过以下方法实现:

    // Add a logger filter
    DefaultIoFilterChainBuilder chain = new DefaultIoFilterChainBuilder();
    chain.addLast("logger", new LoggingFilter());
    
    // And inject the created chain builder in the service
    acceptor.setFilterChainBuilder(chain);

    IoConnector

    和我们必须实现IoAcceptor接口实现服务器一样,必须用IoConnector接口实现客户端。
    实现该接口的类如下:
    1. NioSocketConnector:无阻塞(no-blocking)面向socket连接的IoConnector

    2. NIoDatagramConnector:无阻塞(no-blocking)面向Udp连接的IoConnector

    3. AprSocketConnector:阻塞(blockiing)面向socket连接的IoConnector, 基于APR

    4. ProxyConnector:支持代理的IoConnector

    5. SerialConnector:支持串行传输的IoConnector

    6. VmPipeConnector:in-VM IoConnector

    下图为IoConnector 继承关系图

        
    以上就是IoService部分内容,下一篇讲述IoSession。

  • 相关阅读:
    WCF服务编程 读书笔记——第1章 WCF基础(2)
    WCF服务编程 读书笔记——第1章 WCF基础(1)
    设计模式17:Iterator 迭代器模式(行为型模式)
    设计模式16:Mediator 中介者模式(行为型模式)
    设计模式23:Visitor 访问者模式(行为型模式)
    设计模式22:Strategy 策略模式(行为型模式)
    设计模式21:State 状态模式(行为型模式)
    Python常用库之二:Pandas
    Python常用库之一:Numpy
    TensorFlow基础(三)激活函数
  • 原文地址:https://www.cnblogs.com/marcotan/p/4256974.html
Copyright © 2020-2023  润新知