互联网的长在线、心跳和断线重连
概述
目前IM软件有一个基本的功能就是长在线,即只要有网络就保持登录,然而,网络状态是无法预测的,所以IM软件经常会有”离线“状态,尤其是手机客户端。长在线这个功能依赖断线重连完成。
通常,网络不稳定是造成不能长时间在线的主要原因,还有比如:服务器强制注销客户端、次客户端被主客户端踢。目前的qq和飞信都有断线重连机制。有时候IM软件自动完成登录,有时候需要用户手动登录。所以,断线重连是一个广泛的概念。可以这么理解:除了从登录界面进去的登录,都可以称之为断线重连。
断线重连的定义
使得IM软件能够长在线,或者短时间内掉线,用户无感知。
广义断线重连:用户已经成功登录IM客户端,用户将程序放到后台、或者手机重启,IM软件再次进入前台,软件应帮助用户实现自动登录。
狭义的断线重:客户端的网络状况是不可预知的,可能从2G切换到3G或者WiFi,或者又切换到2G,甚至“飞行模式”(iOS设备)。客户端要及时对网络的变化做出反应,即尝试进行登录。
总之:断线重连,一般是网络原因引起的,目的是让IM软件维持在线。
实现方法
IM客户端始终尽可能的保持连接跟服务器的连接,客户端维护登录状态,以便断线重连。从逻辑层次上来说,断线重连的逻辑是基于登录的逻辑的,首次登录成功后,都有可能有断线重连。断线重连,实质上分为两步:一、使客户端断线;二、让客户端重连服务器。一般来说这两步是一个有前后顺序,完整的过程。
一、使客户端断线,即让客户端处于“未连接”状态。以下情况将触发这个事件:
1.网络切换,如从WiFi切换到4G,网络事件。
2.网络连接失败、网络不可用。
3.心跳失败、心跳超时,失败统称心跳失败。
4.IM软件后台运行即将结束。
二、让客户端重连服务器,客户端根据以下几种情况实现重连服务器。
1.iOS系统“网络可用”的通知
2.IM软件切换到前台,用户触发事件。
3.网络切换,如从WiFi切换到4G,网络事件。
4.心跳失败的事件。
5.客户端重新启动事件。
断线重连的场景可以总结为下面几个:
1. 重新启动(自动登录)
属于广义的断线重连,需要提前加载用户缓存,保证用户到达主界面后能看到历史信息。
2. 网络错误,网络切换
网络连接失败有很多种,不同的场景,客户端要使用不同的逻辑处理。
3. 心跳失败
心跳超时,失败统称心跳失败。这个案例说明当前客户端——服务器连接已经损坏,或者当前用户身份有变化。心跳失败后首先将客户端离线,然后进行断线重连操作,避免心跳失败和网络错误事件一并发生,造成两次登录。
4. 网络可达或者切换到前台
为了避免重复登录,当IM软件处于“登录成功”、“连接中”或者“已注销”的几个状态的时候,客户端忽略“网络可达或者切换到前台”的事件。
客户端心跳
1. Server主动断开socket
Server只是接收客户端发起的心跳。假如,Server长时间没有收到客户端的心跳,Server认为客户端已经“死了”,主动断开这个连接。此时客户端可能就是假在线了。
2. 客户端断开socket
客户端对待心跳,要比Server麻烦一些。客户端要关注两个值:
心跳间隔值,即客户端多长时间发一次心跳?
心跳的超时时间。客户端发送一次心跳,如果长时间得不到Server应答,代表网络糟糕。客户端需要断开socket,主动离线。
心跳失败也会引起断线重连
下面是“心跳失败”引起的断线重连的流程图
信令风暴
互联网应用的心跳包除了宣告终端在线外,还有一项重要的任务,就是提供终端的即时地址,方便应用服务器的寻址。 有了互联网应用的心跳机制,应用服务器可以及时下发(Push)用户相关的信息,比如微信中的短消息、图片或者语音等。心跳包也会带来很多副作用,比如终端更为费电,还可能给移动通信网络带来信令风暴。
看起来很完美的心跳机制,为什么会给移动网络带来信令风暴呢?原来,移动通信网络中由于用户众多、资源稀缺,每个用户都是动态占用资源,比如IP地址以及无线信道。每次发送心跳包,都需要移动通信网络为用户分配资源,分配的过程体现在信令的发送和接收上。一次心跳包的发送过程,牵涉的信令多达几十条。 随着互联网APP的普及,大量的终端周期性地发送心跳包,效果类似于IP网络中的DDOS,必然对移动通信网络设备带来冲击,造成拥塞等情况,这种现 象就是信令风暴。
https://blog.csdn.net/kobejayandy/article/details/46701251
互联网的长在线、心跳和断线重连相关推荐
- 长连接、心跳和断线重连
长连接.心跳和断线重连 2017年06月22日 18:38:53 天涯遍地是小草 阅读数 7938 一.概述 目前IM软件有一个基本的功能就是长在线,即只要有网络就保持登录,然而,网络状态是无法预测的 ...
- 长连接 、短连接、心跳机制与断线重连
在不同场景下要考虑长连接还是短连接,那么我们要先了解他. 短连接 概念 client与server通过三次握手建立连接,client发送请求消息,server返回响应,一次连接就完成了. 这时候双方任 ...
- 浅谈IM软件客户端的断线重连、心跳和长在线
----------------------------------------------------欢迎查看IM软件业务知识<专栏>-------------------------- ...
- Android 通过 NSD 服务 Netty(断线重连、心跳、黏包处理) 实现两个 Android 系统端的长连接通讯
引言 近期需求,通过手机App端取号机(含叫号通知功能),实时连接 另一台 Android 广告机用于播放当前被叫到的号数. 这里有两种Android 机 一台「基于Sunmi版的可出小票的Andro ...
- android 心跳 简书,Android Socket保持心跳长连接,断线重连
昨天三点钟才睡觉的,现在胸口感觉闷闷的,兄弟们,我是不是要GG了?如果我G了,求大佬们给我烧个女朋友, ss.gif 1.在使用Socket连接客户端和服务器端的时候,如果服务端断开了连接,我们客户端 ...
- 面试官问:服务的心跳机制与断线重连,Netty底层是怎么实现的?懵了
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 心跳机制 何为心跳 所谓心跳, 即在 TCP 长连接中, ...
- Netty实现心跳机制与断线重连
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:https://www.jianshu.com/p/ ...
- 浅析 Netty 实现心跳机制与断线重连
基础 何为心跳 顾名思义, 所谓 心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性. 为什么需要心跳 因为网络的不可 ...
- 四、Netty 实现心跳机制与断线重连
一.概述 何为心跳 顾名思义, 所谓心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性. 为什么需要心跳 因为网络的不 ...
- 用Netty撸一个心跳机制和断线重连!
来源:www.jianshu.com/p/1a28e48edd92 心跳机制 何为心跳 所谓心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确 ...
最新文章
- 服务器邮箱备份文件在哪里,如何轻松将数据文件备份到电子邮箱?
- Git突破文件限制上传大文件
- 计算机网络实验仿真系统设计,计算机网络实验课程仿真系统平台的研究与设计...
- 【Java】BigDecimal
- 密码学专题 文本数据库
- CSS3最颠覆性的动画效果,基本属性[3D]
- web流程设计器 工作流的 整合视频教程 activiti画图 SSM和独立部署
- 调试一个Ext打开的window窗口内嵌Iframe的form提交问题
- @Scheduled定时任务
- matlab编写全置信度函数,Matlab_curve_fitting_tool的用法图文结合
- 什么是银行行号,银行联行号有哪些功能?
- smith圆图重要性_smith圆图的理解
- 报错:Unhandled exception
- java的round函数怎么用_Java Math round()用法及代码示例
- 深度学习|迁移学习|强化学习
- 蒲公英 · JELLY技术周刊 Vol.29: 前端智能化在阿里的那些事
- 玩转华为数据中心交换机系列 | 配置基于MAC地址划分VLAN示例
- 路由器怎么知道外网返回的数据包发给局域网中哪台主机呢?
- Windows重定向技术【文件重定向与注册表重定向】
- python实现抽签功能(不放回抽样)
热门文章
- 16位伪指令汇编程序查看内存
- 求n!的位数以及求n!具体的值(C or C++)
- 二维向量vector初始化问题(以统计字符串字母题为例)
- excel 使用排序工具实现每隔一行加一行空行
- 实习踩坑之路:使用@Value注解导致Parse attempt failed for value [08:00],时间转换出错?
- Flutter实战之Builder和StatefulBuilder
- Netflix:如何打造开放协作的实时 ETL 平台?
- 面试官:问点基础,说说Object类下面有几种方法呢?
- 基于 MVP+RxJava2+Retrofit2 的应用—熊猫眼
- mysql 分表查询外连接_SQL多表连接查询实例(内连接外连接)