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<S extends AbstractIoSession, H> ,轮询的方式处理会话和服务器端 socket 连接。
上面介绍的 NioSocketAcceptor 类就是 AbstractPollingIoAcceptor<S extends AbstractIoSession, H> 的子类。
AbstractIoAcceptor 有一个子类 AbstractPollingConnectionlessIoAcceptor<S extends AbstractIoSession, H> ,处理数据报文的传输。

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

org.apache.mina.core.service.IoProcessor<S extends IoSession> 接口:
它负责实际的 IO 操作。
它有一个实现类 SimpleIoProcessorPool<S extends AbstractIoSession> ,负责管理具体的会话。
它有一个实现类 AbstractPollingIoProcessor<S extends AbstractIoSession>,轮询的方式的 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<T extends IoFuture> 接口:
它定义了一个回调函数,可以通过 AbstractIoService 类的 initSession 方法作为参数使用。

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

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

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

以上只是底层结构的说明,实现机制还需要从上层的具体类的调用进行分析。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值