[size=medium]Mina暴露给开发者的接口主要是IoAcceptor(服务器端)或者IoConnector(客户端)。Mina内部具体是怎么实现侦听,处理连接的呢?我们先来介绍一下Mina的方法哲学或者说术语吧。
IoSession
[list]
IoSession: IoSession是一个客户连接的抽象,整个通讯框架可以说,都是围绕着IoSession工作的。
IoAcceptor: 初始化服务器,用的就是它
IoProcessor: 负责处理IoSession,包括创建,移除,读写事件的处理
IoFilter: 过滤消息或者说消息处理(通讯层的)
IoHandler: 消息处理(应用逻辑层的)
[/list]
通讯层的核心类,事实上是IoAcceptor,IoProcessor,IoSession。在这里我们只分析IoAcceptor模式,也就是服务器端的代码。客户端的代码与此类似,大家可以自己研究。
首先,调用IoAcceptor.bind()方法时,服务器已经初始化完毕,这时服务器就在指定的端口上开始侦听客户端发来的连接请求。
当IoAcceptor侦听到客户端请求时,它就会把这个请求交给IoProcessor进行处理。然后IoAcceptor回去继续侦听。显然,IoAcceptor的工作流程就是 侦听 --> 传递请求 --> 继续侦听。
IoProcessor得任务则是处理这些连接的IO事件。显然IoProcessor不可能和IoAcceptor在同一个线程里运行。他们两个分工不同,可以并发执行。Mina内部事实上维护了一个IoProcessor对象池,对象池的默认大小是CPU个数+1.也就是说,如果你的机器是4核的,可能就有5个IoProcessor(可以理解为线程)同时工作。
看看下面的示意图吧,一图胜千言:
[img]http://dl.iteye.com/upload/attachment/431440/1bc79b44-92e8-3856-bb81-beb5f10814ab.jpg[/img]
[/size]
IoSession
[list]
IoSession: IoSession是一个客户连接的抽象,整个通讯框架可以说,都是围绕着IoSession工作的。
IoAcceptor: 初始化服务器,用的就是它
IoProcessor: 负责处理IoSession,包括创建,移除,读写事件的处理
IoFilter: 过滤消息或者说消息处理(通讯层的)
IoHandler: 消息处理(应用逻辑层的)
[/list]
通讯层的核心类,事实上是IoAcceptor,IoProcessor,IoSession。在这里我们只分析IoAcceptor模式,也就是服务器端的代码。客户端的代码与此类似,大家可以自己研究。
首先,调用IoAcceptor.bind()方法时,服务器已经初始化完毕,这时服务器就在指定的端口上开始侦听客户端发来的连接请求。
当IoAcceptor侦听到客户端请求时,它就会把这个请求交给IoProcessor进行处理。然后IoAcceptor回去继续侦听。显然,IoAcceptor的工作流程就是 侦听 --> 传递请求 --> 继续侦听。
IoProcessor得任务则是处理这些连接的IO事件。显然IoProcessor不可能和IoAcceptor在同一个线程里运行。他们两个分工不同,可以并发执行。Mina内部事实上维护了一个IoProcessor对象池,对象池的默认大小是CPU个数+1.也就是说,如果你的机器是4核的,可能就有5个IoProcessor(可以理解为线程)同时工作。
看看下面的示意图吧,一图胜千言:
[img]http://dl.iteye.com/upload/attachment/431440/1bc79b44-92e8-3856-bb81-beb5f10814ab.jpg[/img]
[/size]