1 Mina 在客户端和服务端的工作流程是什么? 1.1 客户端通信过程 1. 通过 SocketConnector 同服务器端建立连接 2. 链接建立之后 I/O 的读写交给了 I/O Processor 线程, I/O Processor 是多线程的 3. 通过 I/O Processor 读取的数据经过 IoFilterChain 里所有配置的 IoFilter , IoFilter 进行消息的过滤,格式的转换,在这个层面可以制定一些自定义的协议 4. 最后 IoFilter 将数据交给 Handler 进行业务处理,完成了整个读取的过程 5. 写入过程也是类似,只是刚好倒过来,通过 IoSession.write 写出数据,然后 Handler 进行写入的业务处理,处理完成后交给 IoFilterChain ,进行消息过滤和协议的转换,最后通过 I/O Processor 将数据写出到 socket 通道 2 IoAcceptor 与 IoConnector 的区别是什么? 2.1 Acceptor 作为服务器端的连接接受者, SocketAcceptor 用来监听端口,同客户端建立连接,连接建立之后的 I/O 操作全部交给 IoProcessor 进行处理 IoAcceptor acceptor = new NioSocketAcceptor(); acceptor.bind( new InetSocketAddress(PORT) ); 2.2 Connector 作为连接客户端, SocketConector 用来和服务器端建立连接,连接成功,创建 IoProcessor Thread (不能超过指定的 processorCount ), Thread 由指定的线程池进行管理, IoProcessor 利用 NIO 框架对 IO 进行处理,同时创建 IoSession 。连接的建立是通过 Nio 的 SocketChannel 进行。 NioSocketConnector connector = new NioSocketConnector(processorCount); ConnectFuture future = connector.connect(new InetSocketAddress(HOSTNAME, PORT)); 建立一个 I/O 通道 3 IoService 与 IoSession 的区别是什么? IoSession 是用来保持 IoService 的上下文,一个 IoService 在建立 Connect 之后建立一个 IoSession (一个连接一个 session ), IoSession 的生命周期从 Connection 建立到断开为止。 IoSession 做两件事情: 1. 通过 IoSession 可以获取 IoService 的所有相关配置对象 ( 持有对 IoService , Processor 池, SocketChannel , SessionConfig 和 IoService.IoHandler 的引用 ) 2. 通过 IoSession.write 是数据写出的入口
详见: jjvv 在 javaeye 上的博文: MINA 原理 http://www.javaeye.com/topic/599925