mina源码学习

来源:互联网 发布:java培训班能就业吗 编辑:程序博客网 时间:2024/04/29 05:23

Apache mina是一个网络通信应用框架,它主要是对基于TCP/IP,UDP/IP协议栈的通信框架。使用mina框架可以快速开发高性能,高扩展的网络通信应用,mina提供了事件驱动,异步操作的编程模型。mina框架有1.x和2.x两个版本,此处学习的是2.x版本的源码,在阅读源码之前需要掌握I/O,NIO,Socket,多线程及java并发库相关的内容。
mina同时提供了网络通信服务端和客户端的封装,那么我们先来看一个服务端的例子。

final IoAcceptor acceptor = new NioSocketAcceptor();        acceptor.getFilterChain().addLast("logger", new LoggingFilter());        acceptor.getFilterChain().addLast("codec",                new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));        acceptor.setHandler(new ServerHandler());        acceptor.getSessionConfig().setReadBufferSize(2048);        acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);        acceptor.bind(new InetSocketAddress(PORT));

这段代码中涉及到的接口有IoService,IoAcceptor,IoFilter,IoHandler,IoSessionConfig,IoSession等。
其中IoService接口有两个子接口IoAcceptor和IoConnector,IoAcceptor表示服务端,IoConnector表示客户端,也就是说IoService既可以表示客户端也可以表示服务端,此处我们编写的是服务端代码,因此使用IoAcceptor接口。由于IoAcceptor接口与具体的实现协议无关,我们就以TCP协议为例,使用的实现类就是NioSocketAcceptor。
IoFilter接口表示过滤器,既然有过滤器,那么肯定有对应的过滤器链。mina中过滤器链用IoFilterChain接口表示。它俩的作用有点类似Tomcat中的过滤器链和过滤器。
IoHandler接口用于处理I/O相关的事件,负责具体的业务逻辑处理,也就是接收和发送数据的地方。作用类似于Tomcat的Servlet,当拦截器链上所有的拦截器都执行完成之后就会交由IoHandler对应的实现类处理。
IoSessionConfig接口主要用于设置Session的相关属性。比如设置读取缓冲的字节数,指定空闲状态的间隔时间,设置写超时时间等。
IoSession接口表示底层的一个TCP连接,保存了客户端与服务端的连接状态,并且可以执行异步的写操作和关闭连接的操作等。
我们知道mina是一个通信框架,那么在一次完整的通信过程中服务端会有哪些操作呢?接下来我们将以以上几个接口为主线深入的学习这部分的内容。

0 0
原创粉丝点击