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是一个通信框架,那么在一次完整的通信过程中服务端会有哪些操作呢?接下来我们将以以上几个接口为主线深入的学习这部分的内容。
- Mina源码学习-IoFuture
- Mina 源码学习 -- 总纲
- mina源码学习
- 【源码学习】Mina笔记 (一)
- mina源码学习之IoSession
- Mina-2.0.7源码学习 (1)
- Mina-2.0.7源码学习 (2)
- Mina-2.0.7源码学习 (3) ------ IoBuffer
- Mina-2.0.7源码学习 (4) --- IoFuture
- OpenFire源码学习之二:Mina基础知识
- mina源码学习之创建IoAcceptor
- mina源码学习之接收线程
- mina源码
- MINA学习
- MINA学习
- MINA学习
- Mina 学习
- MINA学习
- 中秋家宴 ▎食物才是最好的团圆
- Linux网络编程:原始套接字的魔力【上】
- Red Hat Enterprise Linux 6 搭建 Lamp 环境 实践全程记录
- javascript——创建对象的几种方式
- NSString中涉及document目录或者沙盒目录常用方法总结
- mina源码学习
- 边线的长短解决方法
- Header First HTML and CSS章后bullet points总结之Chapter 9
- GreenPlum 基础操作 入门教程
- Centos7 安装sklearn gcc: error: ‘-Qunused-arguments’
- codevs 1047 邮票面值设计(dfs+背包,好题)
- SSM做一个简单的网上商城-搭建项目
- jwt(json-web-token)在rest中的实现–jersey
- 一致性Hash算法