关闭

mina第三章 框架 深入理解

387人阅读 评论(1) 收藏 举报
分类:

前言:今天又看了一下mina框架,理解果然深入了, 下面我来分享我的心得


mina框架能解决的问题:

主要解决多客户端连接同一个服务器端


mina几个重要接口:

    IoServiece :这个接口在一个线程上负责套接字的建立,拥有自己的 Selector,监听是否有连接被建立。
    IoProcessor :这个接口在另一个线程上负责检查是否有数据在通道上读写,也就是说它也拥有自己的 Selector,这是与我们使用 JAVA NIO 编码时的一个不同之处,通常在 JAVA NIO 编码中,我们都是使用一个 Selector,也就是不区分 IoService与 IoProcessor 两个功能接口。另外,IoProcessor 负责调用注册在 IoService 上的过滤器,并在过滤器链之后调用 IoHandler。  
    IoAccepter :相当于网络应用程序中的服务器端
    IoConnector :相当于客户端
    IoSession :当前客户端到服务器端的一个连接实例
    IoHandler :这个接口负责编写业务逻辑,也就是接收、发送数据的地方。这也是实际开发过程中需要用户自己编写的部分代码。
    IoFilter :过滤器用于悬接通讯层接口与业务层接口,这个接口定义一组拦截器,这些拦截器可以包括日志输出、黑名单过滤、数据的编码(write 方向)与解码(read 方向)等功能,其中数据的 encode与 decode是最为重要的、也是你在使用 Mina时最主要关注的地方。</strong></span>

mina框架原理图:


客户端的通信过程:

    通过SocketConnector同服务器端建立连接。
    链接建立之后I/O的读写交给了I/O Processor线程,I/O Processor是多线程的。
    通过I/O Processor读取的数据经过IoFilterChain里所有配置的IoFilter,IoFilter进行消息的过滤,格式的转换,在这个层面可以制定一些自定义的协议。
    最后IoFilter将数据交给Handler进行业务处理,完成了整个读取的过程。
    写入过程也是类似,只是刚好倒过来,通过IoSession.write写出数据,然后Handler进行写入的业务处理,处理完成后交给IoFilterChain,进行消息过滤和协议的转换,最后通过I/O Processor将数据写出到socket通道。

IoFilterChain作为消息过滤链

  1. 读取的时候是从低级协议到高级协议的过程,一般来说从byte字节逐渐转换成业务对象的过程。
  2. 写入的时候一般是从业务对象到字节byte的过程。


原理解说: 服务器端开启监听,客户端开始连接(注意这里得客户端会有很多个),这时候 首先 socket通道开启了,然后 iosession监听开启,然后 开始执行 IOprocessor 、 iofileter 、Handler , 

socket作用:传输数据(俗称管道), 本人理解也为建立连接的管道标识.


iosession 是整个 客户端到服务端的生命周期,当然客户端和服务器端都可以关闭 session.


问题:项目中有很多个设备,客户端是不断地给服务器端发送连接,那么问题来了,如何在服务器端关闭到当前的客户端socket呢(注意不是session)     我们可以这样  session.getService().dispose();   完美关闭

这样的话,当socket都关闭了, 那么这个客户端(我所说的设备) 就彻底和服务端断开了(也就是不时时连接了).



其余的方法和demo 请自行百度搜索

3
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:142409次
    • 积分:2761
    • 等级:
    • 排名:第13618名
    • 原创:124篇
    • 转载:18篇
    • 译文:6篇
    • 评论:10条
    最新评论