寂寞大萝卜 发表于 2015-7-30 15:42:39

Apache Mina(二)

  在mina的源码,整个框架最核心的几个包是 :


[*]org.apache.mina.core.service :IoService、IoProcessor、IoHandler、IoAcceptor、IoConnector
[*]org.apache.mina.core.session
[*]org.apache.mina.core.polling
[*]org.apache.mina.transport.socket
  IoService :Base interface for all IoAcceptors and IoConnectors that provide I/O service and manage IoSessions.
      它是所有 IoAcceptor 和 IoConnector 的基接口,对于一个 IoService,有哪些信息需要我们关注呢?


[*]底层的元数据信息 TransportMetadata,比如底层的网络服务提供者(NIO,ARP,RXTX等)。(除此方法之外,其它方法在 AbstractIoService 得以实现。)
[*]通过这个服务创建一个新会话时,新会话的默认配置 IoSessionConfig。
[*]此服务所管理的所有会话。
[*]与这个服务相关所产生的事件所对应的监听者(IoServiceListener)。
[*]处理这个服务所管理的所有连接的处理器(IoHandler)。
[*]每个会话都有一个过滤器链(IoFilterChain),每个过滤器链通过其对应的 IoFilterChainBuilder来负责构建。
[*]由于此服务管理了一系列会话,因此可以通过广播的方式向所有会话发送消息,返回结果是一个WriteFuture集,后者是一种表示未来预期结果的数据结构。
[*]服务创建的会话(IoSession)相关的数据通过 IoSessionDataStructureFactory来提供。
[*]发送消息时有一个写缓冲队列。
[*]服务的闲置状态有三种:读端空闲,写端空闲,双端空闲。
[*]还提供服务的一些统计信息,比如时间,数据量等。
  IoProcessor :An internal interface to represent an 'I/O processor' that performs actual I/O operations for IoSessions. It abstracts existing reactor frameworks such as Java NIO once again to simplify transport implementations.
一个内部接口代表一个I/O处理器,它为 IoSession 执行实际的I/O操作。它抽象现有反应器框架,如 Java NIO 再一次简化传输实现。
  1、IoAcceptor :服务器端接口,接受客户端访问的请求。
  2、AbstractIoService :设定处理函数、Filter、IoServiceListener,实现了 IoService 所有方法,除了 getTransportMetadata() 。
  3、IoServiceListener :可以用于打印日志,主要有Service启动、停止、空闲等监听方法。
  4、处理函数是一个Executor或者是Executor的包装。
  5、AbstractIoAcceptor完成绑定监听端口。
  6、AbstractPollingIoAcceptor执行具体的监听连接以及监听I/O事件,但真正实现的是NioSocketAcceptor open() 方法。
  7、NioSocketAcceptor用JAVA NIO的方式实现了具体的连接方法ServerSocketChannel,例如open,accept等

  



  以下代码的流程:



    IoAcceptor acceptor = new NioSocketAcceptor();
acceptor.setHandler(new IoHandlerAdapter());
acceptor.bind(new InetSocketAddress(6969));
  1)NioSocketAcceptor 构造函数:



    public NioSocketAcceptor() {
super(new DefaultSocketSessionConfig(), NioProcessor.class);
((DefaultSocketSessionConfig) getSessionConfig()).init(this);
}
  定义了SessionConfig,并把this传递到SessionConfig当中,指定NioProcessor。
  AbstractPollingIoAcceptor 构造函数:



    protected AbstractPollingIoAcceptor(IoSessionConfig sessionConfig, Class
页: [1]
查看完整版本: Apache Mina(二)