Android mina长连接 (一)

慕课网视频地址:https://www.imooc.com/learn/686

1.长连接基本概念

与http短连接相反,通过某种方式与服务器一直保持连接就叫长连接

http短连接:每次与服务器通信,要先建立连接,通信,断开连接

长连接:一旦我们与服务器连接成功后,我们的连接一直保持存在,随时都可以和服务器进行通信

2.长连接的原理

底层都是基于TCP/IP协议

通过Socket,ServerSocket与服务器保持连接

服务端 一般使用ServerSocket来建立监听,监听客户端与之连接

客户端使用Socket,指定端口和IP地址,与服务端进行连接

3.长连接的意义

通过长连接,可以实现服务器主动向客户端推送消息

        微信上的使用场景:微信朋友圈有新动态的时候,会用一个红点来提示,如果没有长连接,我们就会隔几秒向服务端发送一个请求,来判断是否有新的动态;我们有长连接的话,服务器可以主动给我们推送一个消息过来,这样的话我们客户端可以根据这个消息来更新我们UI即可,极大的减小了我们客户端和服务端两端的压力

通过长连接,可以减少客户端对服务器的轮询,减小服务器压力

通信效率要远高于http

       http每次与服务器通信,要先建立连接,通信,断开连接,每次都要这样.即使我们效率比较高的Okhttp,他也是缓存好的一些connection对象,而我们的长连接,只要连接好,就可以随时的通信,不同频繁的请求和断开连接

4.mina相对于其他的通信框架的优势

非常适合于C/S架构的通信框架

        因为我们的mina,它本身已经封装的非常好,我们在使用的时候,只需要在通信的时候调用mina的Api

完成通信,不需要关心底层的通信是如何实现的

apache出品的开源项目,值得信赖

官网上有详细的资料公开发者学习

使用起来非常的简单,降低我们的学习成本

5.mian框架整体讲解

项目工程结构如图:

通过这张图可以看出来我们的mina已经封装的特别好了,我的应用层只需要调用mina的api即可完成与服务端的通信,不需要了解内部的连接是如何的建立的

mina内部工作原理图:

这张图是双向的,我们从上往下看,首先 Remote peer代表我们的远程服务器,与我们的客户端通过IoService建立连接以后就会得到一个Session,然后我们的Session将我们的数据传递给IoFilterChain(过滤链)中,然后过滤链将数据过滤直到将符合条件的数据传递给Application layer里,我们的客户端要做的是在IoHandler中完成对数据的操作,更新UI/保存数据库

6.mina框架核心类讲解

IoService及其相关类

IoService是个接口

Responsibilities职责主要负责监听的管理,IoHandler的管理,IoSession的管理等等

IoService有一个子类AbstractIoService,它主要实现一些默认的一些方法和成员变量,他添加了默认的过滤链,默认handler,默认的线程池等等

服务器端IoAcceptor及其相关类

IoAcceptor继承IoService

SocketAcceptor 和 DatagramAcceptor继承IoAcceptor 两个接口分别一个支持UDP协议,一个支持TCP协议

NioDatagramAcceotor和NioSocketAcceptor分别是UDP和TCP协议的监听器

IoConnector及其相关类

IoConnector接口也是继承IoService接口,

DatagramConnector和SocketConnector两个接口继承IoConnector,一个支持TCP协议,一个支持UDP协议

Filter及其相关类

LoggingFilter记录mina所有日志

ProtocolCodecFilter数据转化过滤器

CompressionFilter数据压缩过滤器

SSLFilter 数据加密过滤器

通过继承IoFilterAdapter来实现自己的过滤器

IOSession类

通过IOSession类可以read() writen() close()

receive buffer size 设置接受数据缓存区大小

sending buffer size 设置数据发送缓存区大小

Idel time 设置状态恢复时间

write timeout设置写数据超时时间

Handler类讲解(我们应用层比较重要的类)

Session监听 SessionCreated/SessionOpen/sessionClosed

消息监听 messageReceived/messageSend

异常监听 exceptionCaught

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值