zoukankan      html  css  js  c++  java
  • mina基础知识整理

    一、      简介:

    Apache Mina Server 是一个网络通信应用框架,Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了事件驱动、异步(Mina 的异步 IO 默认使用的是 JAVA NIO 作为底层支持)操作的编程模型。

    二、      使用示例:

     

    三、      体系结构:

     

    1.      IoService:

    负责具体的IO相关工作。IOService的意义在于隐藏底层IO的细节,对上提供统一的基于事件的异步IO接口。每当有数据到达时,IOService会先调用底层IO接口读取数据,封装成IoBuffer,之后以事件的形式通知上层代码;从图上看,进来的low-level IO经过IOService层后变成IO Event。

    在服务端的接口是IoAcceptor,具体实现类是NioSocketAcceptor,对应客户端的接口是IoConnector,实现类是NioSocketConnector;

    2.      IoFilterChain:

    Mina的设计理念之一就是业务代码和数据包处理代码分离,业务代码只专注于业务逻辑,其他的逻辑如:数据包的解析,封装,过滤等则交由IoFilterChain来处理。开发者通过往Chain中添加IoFilter,来增强处理流程,而不会影响后面的业务逻辑代码。

    3.      IoHandler:

    实现业务逻辑的地方,需要有开发者自己来实现这个接口;对于Server端和Client端来说都是IoHandler接口的实现类;在Mina中提供了IoHandler的实现类IoHandlerAdapter,业务逻辑代码类只需要继承这个类即可;

     

    4.      IoSession:

    一个IoSession对应于一个底层的IO连接,通过IoSession,可以获取当前连接相关的上下文信息,以及向远程peer发送数据。发送数据其实也是个异步的过程。发送的操作首先会逆向穿过IoFilterChain,到达IoService。但IoService上并不会直接调用底层IO接口来将数据发送出去,而是会将该次调用封装成一个WriteRequest,放入session的writeRequestQueue中,最后由IoProcessor线程统一调度flush出去。所以发送操作并不会引起上层调用线程的阻塞。

    四、      工作流程:

     

    在服务器端,bind一个端口后,会创建一个Acceptor线程来负责监听工作。这个线程的工作只有一个,调用Java NIO接口在该端口上select connect事件,获取新建的连接后,封装成IoSession,交由后面的Processor线程处理。在客户端,也有一个类似的,叫Connector的线程与之相对应。

    Processor线程主要负责具体的IO读写操作和执行后面的IoFilterChain和IoHandler逻辑。Processor线程的数量N默认是CPU数量+1(可以通过配置参数来控制其数量)。前面进来的IoSession会被分配到这N个Processor线程中。默认的策略是session id绝对值对N取模来分配。每个Porcessor线程中都维护着一个selector,对它维护的IoSession集合进行select,然后对select的结果进行遍历,逐一处理,读取数据,以事件的形式通知后面IoFilterChain;以及对写请求队列的flush操作;

    通过将session均分到多个Processor线程里进行处理,可以充分利用多核的处理能力,减轻select操作的压力。

  • 相关阅读:
    结束也是开始
    21.1 LogMiner
    20.4 使用FLASHBACK DATABASE 恢复数据库到先前状态
    结束也是开始
    21.2 DBVERIFY
    21.3 DBNEWID
    20.2 使用FlashBack Table 恢复表到先前状态
    21.2 DBVERIFY
    21.3 DBNEWID
    20.3 使用FLASHBACK TABLE 恢复被删除表
  • 原文地址:https://www.cnblogs.com/laoxia/p/7672651.html
Copyright © 2011-2022 走看看