Mina 基本使用和常用类的介绍

阅读更多
Mina 的全称是 Multipurpose Infrastructure for Network Applications ,是用于开发高性能和高可用性的网络应用程序的基础框架。
通过使用 Mina 框架可以可以省下处理底层I/O和线程并发等复杂工作,开发人员能够把更多的精力投入到业务设计和开发当中。

框架经常使用以下几个类:
NioSocketAcceptor 类用于创建服务端监听;NioSocketConnector 类用于创建客户端连接;IoSession 类用来保存会话属性和发送消息;IoHandlerAdapter 类用于定义业务逻辑。
	public static void main(String[] args) throws Exception {
		int PORT = 6789;
	    IoAcceptor acceptor = new NioSocketAcceptor();  
	    // 注册filter   
	   acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );  
	   acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));  
	    // 注册你的业务处理类   
	    acceptor.setHandler( new TimeServerHandler() );  // TimeServerHandler 请查看org.apache.mina.example.gettingstarted.timeserver包
	    // 配置参数   
	    acceptor.getSessionConfig().setReadBufferSize( 2048 );  
	    acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );  
	    // 让Acceptor在绑定的地址侦听   
	    acceptor.bind( new InetSocketAddress(PORT) );  
	}

程序运行后,可以通过 telnet 连接到 6789 端口,测试一下 TimeServerHandler 类的功能。

基本的流程如下:
User -> IoService -> IoProcessor -> IoFilter -> IoFilter -> IoHandler
对象 <-    对象   <-       对象     <-   对象 <-   对象  <-    对象

以下是框架核心接口的简单说明:
org.apache.mina.core.service.IoService 接口:
它是 IoAcceptor 和 IoConnector 的父接口,是框架所有功能的总接口。
它有一个实现类 AbstractIoService ,它有一个 Executor 来处理事件,还有一个 AtomicInteger 确保 ID 的唯一。

org.apache.mina.core.service.IoAcceptor 接口:
它用于绑定 IP 和端口,接收客户端的连接请求,同时会触发相应的事件给 IoHandler 去处理。
它有一个实现类 AbstractIoAcceptor ,是基本功能的实现,此类承继了 AbstractIoService 类。
AbstractIoAcceptor 有一个子类 AbstractPollingIoAcceptor ,轮询的方式处理会话和服务器端 socket 连接。
上面介绍的 NioSocketAcceptor 类就是 AbstractPollingIoAcceptor 的子类。
AbstractIoAcceptor 有一个子类 AbstractPollingConnectionlessIoAcceptor ,处理数据报文的传输。

org.apache.mina.core.service.IoConnector 接口:
它用于连接服务器指定的 IP 和端口,发送客户端的连接请求,同时会触发相应的事件给 IoHandler 去处理。
它有一个实现类 AbstractIoConnector ,是基本功能的实现,此类承继了 AbstractIoService 类。
AbstractIoConnector 有一个子类 AbstractPollingIoConnector ,轮询的方式处理会话和客户端 socket 连接。
上面介绍的 NioSocketConnector 类就是 AbstractPollingIoConnector 的子类。

org.apache.mina.core.service.IoProcessor 接口:
它负责实际的 IO 操作。
它有一个实现类 SimpleIoProcessorPool ,负责管理具体的会话。
它有一个实现类 AbstractPollingIoProcessor,轮询的方式的 IO 操作。

org.apache.mina.core.service.IoHandler 接口:
负责处理所有被框架触发的事件,这些事件是 IoProcessor 发出来的,并且同一个 IoProcessor 负责处理多个会话。
它有一个默认的实现类 IoHandlerAdapter ,只是用适配器模式简单的封装。

org.apache.mina.core.service.IoServiceListener 接口:
它继承 java.util.EventListener 接口,负责监听 IoService 相关的事件。
和它相关的有一个类 IoServiceListenerSupport ,负责将 IoService 和对应监听器整合到一起,方便使用。

org.apache.mina.core.session.IoSession 接口:
它表示通信双端的连接,与底层的传输类型无关。

org.apache.mina.core.session.IoSessionConfig 接口:
它表示会话的配置信息,包含读缓冲区大小、会话数据吞吐量、计算吞吐量时间间隔、指定会话端的空闲时间和写请求的超时时间等等。

org.apache.mina.core.session.IoSessionInitializer 接口:
它定义了一个回调函数,可以通过 AbstractIoService 类的 initSession 方法作为参数使用。

org.apache.mina.core.session.IoSessionRecycler 接口:
它负责回收不再使用的会话。
它有一个实现类 ExpiringSessionRecycler ,用于回收超时失效的会话。

org.apache.mina.core.session.IoEvent 类:
它实现了 Runnable 接口,表示一个事件或请求,它根据事件类型向会话的过滤器链上的监听者发出信号。

org.apache.mina.core.session.IoEventType 枚举:
它定义了事件的类型。

以上只是底层结构的说明,实现机制还需要从上层的具体类的调用进行分析。

你可能感兴趣的:(mina,java)