Android MINA框架之实战总结(一) Mina连接,断开,重连

本文介绍了Apache MINA框架在Android中的应用,详细阐述了MINA的体系结构,包括服务端和客户端的构建。通过实际操作展示了MINA的连接、断开和断线重连过程,提供了服务器搭建步骤和客户端实现,帮助读者理解MINA在即时通信中的应用。
摘要由CSDN通过智能技术生成

(一). 前言

Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中。
总之:我们简单理解它是一个封装底层IO操作,提供高级操作API的通讯框架!

(二). MINA体系结构

Mina鸟瞰图

这里写图片描述
Mina位于用户程序和网络处理之间,将用户从复杂的网络处理中解耦,我们就可以更加关注业务领域。

Minamina组件结构图

这里写图片描述
Mina框架被分成了主要的3个组件部分:

•I/O Service,具体提供服务的组件。
•I/O Filter Chain,过滤器链,用于支持各种切面服务。
•I/O Handler,用于处理用户的业务逻辑。

相对应的,为了创建一个基于Mina的应用程序,我们需要:

•创建I/O Service :可选择Mina提供的Services如(*Acceptor)或实现自己的Service。
•创建I/O Filter :同样可以选择Mina提供的各类filter,也可以实现自己的编解码过滤器等。
•实现I/O Handler,实现Handler接口,处理各种消息。

Mina服务端结构

这里写图片描述
服务端的作用就是开启监听端口,等待请求的到来、处理他们、以及将发送对请求的响应。同时,服务端会为每个连接创建session,在session周期内提供各种精度的服务,比如连接创建时(sessionCreated(IoSession session))、连接等待时(sessionIdle(IoSession session, IdleStatus status))、连接销毁时(sessionClosed(IoSession session))等。mina的api为TCP/UDP提供的一致性Server端操作。

•IOAcceptor 监听来自网络的请求。
•当新的连接建立时,一个新的session会被创建,该session用作对同一IP/端口组合的客户端提供服务。
•数据包需经过一系列的过滤器,这些过滤器可用来修改数据包的内容(如转换对象、添加或修改信息等),其中将原始字节流转换成POJO对象是非常有用的。当然这需要解编码器提供支持。
•最后这些数据包或转化后的对象将交由IOHandler处理,我们将实现IOHandler用于处理具体的业务逻辑。

Mina客户端结构

这里写图片描述
客户端需要连接服务端,发送请求并处理响应。实际上客户端的结构和服务端极其相似。

•客户端首先需要创建IOConnector对象,绑定服务端的IP和端口。
•一旦连接成功,一个于本次连接绑定的session对象将被创建。
•客户端发送给服务端的请求都需要经过一系列的fliter。
•同样,响应消息的接受也会经过一系列的filter再到IOHandler被处理。

所以整体上,mina提供良好的一致性调用和封装结构。在使用mina创建基于网络的程序应用时,投入的学习成本比较低。

(三). 参考资料

本篇文章主要参考以下MINA资料:
1.Apache-mina学习笔记,非常全都资料,附带大量实例:http://blog.csdn.net/cgwcgw_/article/details/18402769(比较完善的学习MINA的笔记)
2.Mina 断线重连:http://chwshuang.iteye.com/blog/2028951(注:讲解了断线重连的原理)
3.mina学习笔记二:从官方例子开始 :http://blog.csdn.net/yoara/article/details/37324821(注:有mina体系结构图,能对MINA有个清晰的了解)

(四). 下载资料

本篇文章的DEMO下载地址:
1.MINA服务端:https://github.com/wsm2015/CWMinaServer
2.MINA客户端:https://github.com/wsm2015/CWMinaClient

(五). 服务器搭建

第一步.下载使用的Jar包:

登录http://mina.apache.org/downloads.html下载最新 mina压缩包(我下的是apache-mina-2.0.13-bin.zip),解压获得mina-core-2.0.13.jar和slf4j-api-1.7.14.jar(注:slf4j-api-1.7.14.jar文件在apache-mina-2.0.13-bin.zip\apache-mina-2.0.13\lib目录下)

第二步.服务端程序

创建一个简单的服务端程序:(服务端绑定3344端口)

public class DemoServer {
   
    // 端口号,要求客户端与服务器端一致
    private static int PORT = 3344;

    public static void main(String[] args) {
        IoAcceptor acceptor = null;
        try {
            // 创建一个非阻塞的server端的Socket
            acceptor = new NioSocketAcceptor();
            // 设置过滤器(使用mina提供的文本换行符编解码器)
            acceptor.getFilterChain().addLast("codec",
                    new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"),
                            LineDelimiter.WINDOWS.getValue(), LineDelimiter.WINDOWS.getValue())));
            // 自定义的编解码器
            // acceptor.getFilterChain().addLast("codec", new
            // ProtocolCodecFilter(new CharsetCodecFactory()));
            // 设置读取数据的换从区大小
            acceptor.getSessionConfig().setReadBufferSize(2048);
            // 读写通道10秒内无操作进入空闲状态
            acceptor.getSessionConfig().set
  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值