前言

  • 当实现具备实时性需求时,我们一般会选择长连接的通信方式
  • 而在实现长连接方式时,存在很多性能问题,如 长连接保活
  • 今天,我将 手把手教大家实现自适应的心跳保活机制,从而能高效维持长连接

1. 长连接 介绍

http的长连接和短连接(史上最通俗!)

2. 长连接断开的原因

  • 从上节可知,在长连接的情况下,双方的所有通信 都建立在1条长连接上(1次TCP连接),需要持续保持双方连接才可使得双方持续通信排除其他外因(网络切换、NAT超时、人为原因),TCP长连接在双方都不断开连接的情况上,本质上是不会自动中断的,即不需要心跳包来维持,验证:

1)让2台电脑连上同1个Wifi(其中1台做服务器, 另1台做客户端连接服务器(无设置KeepAlive);

只要电脑、路由器不断网断电,那么,2台电脑的长连接是不会自动中断的。

可是,长连接会存在断开的情况,而 断开原因 主要是:

  • 长连接所在进程被杀死
  • NAT超时
  • 网络状态发生变化
  • 其他不可抗因素(网络状态差、DHCP的租期等等 )

下面,我将对每种原因进行分析

原因1:进程被杀死

当进程被杀死后,长连接也会随之断开

原因2:NAT 超时(重点关注)

原因3:网络状态发生变化

当移动客户端网络状态发生变化时(如移动网络 & Wifi切换、断开、重连),也会使长连接断开

原因4:其他不可抗因素

如网络状态差、DHCP的租期到期等等,都会使得长连接发生 偶然的断开

3. 高效维持长连接的解决方案

  • 在了解长连接断开原因后,针对对应原因,此处给出 高效维持长连接的解决方案

  • 为此,若需有效维持长连接,则需要做到

4、解决方案1:断线重连机制

  • 原理
    检测网络状态变化 & 判断连接的有效性
  • 具体实现
    前者请参考文章:Android:检测网络状态&监听网络变化;后者主要存在于心跳保活机制,所以下面会在心跳保活机制中一起讲解。

5、解决方案2:进程保活

整体概括如下:

6、解决方案3: 心跳保活机制简介

  • 心跳保活机制的整体介绍如下

  • 很多人容易混淆 心跳机制 & 轮询机制,此处给出二者区别

  • 主流心跳机制分析 & 对比

对国、内外主流的移动IM产品(WhatsAppLine、微信)进行了心跳机制的简单分析 & 对比,具体请看下图

如何高效维持网络长连接相关推荐

  1. android 心跳 简书,如何高效维持网络长连接:手把手教你实现 自适应的心跳保活机制...

    前言 当实现具备实时性需求时,我们一般会选择长连接的通信方式 而在实现长连接方式时,存在很多性能问题,如 长连接保活 今天,我将 手把手教大家实现自适应的心跳保活机制,从而能高效维持长连接 目录 示意 ...

  2. 极光推送技术原理:移动无线网络长连接(转自eoe移动开发门户)

    看了看极光推送的原理,还不是太明白,现在记录下来,供以后深究.原文如下: 移动互联网应用现状 因为手机平台本身.电量.网络流量的限制,移动互联网应用在设计上跟传统 PC 上的应用很大不一样,需要根据手 ...

  3. [网络]------长连接和短连接

    本文重点介绍: 长连接和短连接的定义,优缺点以及使用场景 前提须知: 1.HTTP/1.0默认使用短连接,HTTP/1.1开始,默认使用长连接 2.HTTP协议的长连接和短连接,实质是就是TCP协议的 ...

  4. TCP长连接,心跳机制介绍

    TCP长连接,心跳机制介绍 长连接 为何要长连接 心跳 心跳为何设置在服务器端 心跳维持长连接 TCP keep-alive的三个参数 参数的具体意义 心跳的使用场景 长连接 TCP经过三次握手建立连 ...

  5. TCP/IP,HTTP,RPC、SOA、长连接短连接等的区别

    一.TCP/IP 建立TCP需要三次握手才能建立(客户端发起SYN,服务端SYN+ACK,客户端ACK), 断开连接则需要四次握手(客户端和服务端都可以发起,FIN-ACK-FIN-ACK). 1.为 ...

  6. 安卓 休眠 长连接和推送的可选实现

     http://www.cnblogs.com/kobe8/p/3819305.html 从上面的连接里面找到了一些资料: 如果一开始就对Android手机的硬件架构有一定的了解,设计出的应用程序 ...

  7. 朴素、Select、Poll和Epoll网络编程模型实现和分析——Poll、Epoll模型处理长连接性能比较

    在<朴素.Select.Poll和Epoll网络编程模型实现和分析--模型比较>一文中,我们分析了各种模型在处理短连接时的能力.本文我们将讨论处理长连接时各个模型的性能.(转载请指明出于b ...

  8. 高效 保活长连接:手把手教你实现 自适应的心跳保活机制

    前言 当实现具备实时性需求时,我们一般会选择长连接的通信方式 而在实现长连接方式时,存在很多性能问题,如 长连接保活 今天,我将 手把手教大家实现自适应的心跳保活机制,从而能高效维持长连接 目录 1. ...

  9. python requests 异步调用_构建高效的python requests长连接池详解

    前文: 最近在搞全网的CDN刷新系统,在性能调优时遇到了requests长连接的一个问题,以前关注过长连接太多造成浪费的问题,但因为系统都是分布式扩展的,针对这种各别问题就懒得改动了. 现在开发的缓存 ...

最新文章

  1. Java并发编程71道面试题及答案
  2. ncat 重复发送同一个文件
  3. 【干货】容器适配器实现两个栈模拟队列
  4. 去重数组里面重复数据
  5. 企业一般用php还是js,网站开发用php还是js
  6. openglpython3d重构_python+opengl显示三维模型小程序
  7. Spark TopN
  8. python爬取今日头条新闻,js解密
  9. java.lang.IllegalStateException: No output folder
  10. java ajax上传文件
  11. 基于Netty手写RPC框架
  12. CMM3上的集成软件管理
  13. Python识别平台登录验证码
  14. linux运行直播软件,在Linux下可用Wine安装和运行虎牙直播、斗鱼直播
  15. 项目配置不当引发了数据泄露,人已裂开!!(建议收藏)
  16. 聚合微信聊天crm调用代码
  17. notion函数_【notion】关于进度管理-时间函数的一点小心得
  18. 数字化转型的避坑指南:细说数字化转型十二大坑
  19. Java学习笔记——程序逻辑控制
  20. OSChina 周六乱弹 —— 作为程序员我对高数的态度

热门文章

  1. AngularJs angular.bind、angular.bootstrap、angular.copy
  2. Linux入门基础分享[一]
  3. VerilogHDL8位串行乘法器的分析(2)
  4. java getcurrentpid
  5. 用servlet校验密码2
  6. OSI分层和五层协议
  7. 国家集训队 小Z的袜子
  8. 划船训练常见错误:含胸驼背肩胛骨活动不足
  9. [Splay][线段树] jzoj P5662 尺树寸泓
  10. Java IO 流 设计模式