长链接确实在某些时候有很多的优点,要比我们的短链接方便一些,但是我们都知道在学习HTTP的时候就说过这是一个无状态、无链接的一个协议,那他是怎么来实现我们的长链接的?

如果要想弄清楚怎么实现长链接的就要清楚,那些情况会把我们的长链接断开。

  1. 长链接所在进程被杀死,这是很容易理解的一种情况,进程杀死自然就断了。

  2. NAT超时,这里我们介绍一下NAT,我们都知道在IPV4下,ip地址是不够使用的,但是IPV6普及起来又很难,所以现在仍在使用IPV4,或者当我们想要通过无线路由器去上网的时候,我们的设备很有可能就是在一个NAT设备后边,最常见的NAT设备就是我们常用的路由器,NAT设备会在IP封包的时候通过修改设备的源/目的地址。甚至还可以修改TCP和UDP的端口号,这样在同一个内网下的设备,可以使用同一个外网IP。在国内的运营商在链路上如果一段时间内没有通讯的话,就会淘汰对应的NAT地址,就会造成链路中断。

  3. 网络状态发生变化,比如WiFi和移动网络的切换或者链接其他网络等

  4. 还有一些其他不可靠因素,比如网络信号不好,DHCP的短租到期等。

解决方法:

  1. 解决方法一要做到进程保活,这里我们对这种解决办法不做过多的介绍。

  2. 解决方法二就是我们的心跳保活机制这是我们今天主要进行讲解的内容

  3. 解决方法三就是断线重连机制

心跳机制顾名思义和我们的心跳是一样的,采用这个机制之后,客户端会定期向服务器发送一个心跳包(自定义结构体),服务器收到心跳包之后,回复同样的心跳包,完成一次握手操作,保持TCP的长链接状态。如果隔了一定时间之后服务器和客户端都没有收到心跳包或者其他类型的消息,TCP就是断开链接了。

而且TCP的底层是给我们封装了一个心跳机制的,我们可以直接调用,但是底层实现的并不能解决所有的复杂的网络环境,所以通常我们都是自己在应用层实现一个心跳机制,虽然不能通用,但是效果是要比底层封装的好上不少。

并且大多数人经常分不清轮询和心跳机制,这里我们做一个简单的介绍

  1. 轮询是我们为了获取数据的时候来使用的,但是TCP是为了保证链接状态的。

  2. 轮询的频繁数据获取的就会更加的及时,但是心跳机制是否频繁和数据获取没有关系。

  3. 轮询的消耗是非常高的,因为一次轮询就就需要经过三次TCP握手,四次挥手,但是心跳机制是不需要建立或者断开TCP链接的。

HTTP如何实现长链接相关推荐

  1. uniapp 长链接 socket 封装

    App.vue <script>import socket from '@/util/IM.js'export default {watch: {'$route': function() ...

  2. java keeplive,java http长链接(keep-alive)导致的问题

    两种由http长链接(keep-alive)导致的问题,当然这两种问题都有多种原因导致,这里只分析针对keep-alive相关而产生的异常. 1 SocketException: Connection ...

  3. java 实现长链接Comet

    测试环境Tomcat7 Servlet3以后才支持异步Servlet, Tomcat7中才支持. 其他jsp服务器没有测试. 1. Servlet View Code 1 import java.io ...

  4. HTTP的长链接和短链接说明

    HTTP的长链接和短链接实际上是TCP的长连接和短链接.首先我们先介绍一下TCP/IP协议组四层模型.其中包括以下: 应用层:HTTP.FTP.DNS.TELNET等协议 传输层:TCP.UDP 网络 ...

  5. ajax长链接--拉实现

    很多时候需要用在网页上实时显示数据,这个时候一般要用到长链接技术.最简单的实现就是ajax轮询,也就是拉的方式. 下面是一个简单的例子:在网页上实时显示服务器时间. 后端WebService代码: / ...

  6. java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串...

    java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串 1 package com.zdz.test; ...

  7. 长链接短链接拉起拼多多问题

    为保证APP跳转的稳定性.安全性,请渠道使用我们官方提供的文档,用scheme方式从渠道方自身APP拉起拼多多APP的渠道,请scheme后面落地页链接使用我们官方的[长链接],不要使用非官方链接.请 ...

  8. 【短链接】——新浪、百度、搜狐等官方长链接转短链接

    在项目中难免会生成自己的跳转链接,为了简化链接以及防止微信等屏蔽,可以用一些官方的api将自己的链接转为短链接. ConvertShortUrlUtil.java public class Conve ...

  9. Python短链接生成、长链接还原,就是这么简单!

    问题引入 这个问题来自于一位群友的答疑.他的问题是这样的:如何找到一个短链接的原始URL地址.以此为基础,我准备写一篇文章,用Python如何实现长链接.短链接的相互转换. 长链接转短链接 实现长链接 ...

  10. 如何把一个长链接缩短成一个短链接?

    如何把一个长链接缩短成一个短链接? 将长链接变成短链接,涉及到编程像百度.京东.淘宝这样的大厂,有自己的技术团队,加入编程包不过是一顿午饭的实际,那么对于中小企业来说,如何将自己需要推广的长链接缩短成 ...

最新文章

  1. .NET(C#)有哪些主流的ORM框架,FreeSql,SqlSugar,Dapper,EF还是...
  2. “好像在哪见过你”现在有了科学解释,一群脑细胞帮你回忆那张脸 | Science
  3. pycharm在ubuntu xfce下面Alt+insert快捷键冲突解决
  4. [转]Excel导入异常Cannot get a text value from a numeric cell解决
  5. 阿里腾讯今日头条纷纷翻牌子,ClickHouse到底有什么本事?
  6. 2020年上半年,谷歌共检测到11个已遭利用的 0day
  7. Bailian2752 字符串数组排序问题【排序】
  8. 正则表达式(思维导图速查版)
  9. Android:实现弹窗效果
  10. 【毕业设计】基于单片机的指纹识别考勤系统 - 物联网 stm32
  11. CSDN目前有多少注册用户数?
  12. Oracle 11g 从入门到精通 视频教程——适合新手入门学习
  13. 瑞星杀毒软件网络版2012支持Web日志访问
  14. oracle静默安装报错,Oracle静默安装说明
  15. 机器之心对俞栋的采访
  16. 国产cms java_国产java类cms v3.0.161109
  17. CST视图view的操作
  18. android 高德地图定位圈,android ------ 实现高德定位并获取相应信息 ( 最新版高德SDK 和 Android SDK版本)...
  19. 解决错误 Could not find method leftShift() for arguments
  20. Axure的动态面板制作tab切换效果

热门文章

  1. [NLP] 深入浅出 word2vec 词向量详解
  2. SpringBoot中使用Knife4J
  3. Linux配置gdal变量环境,基于GDAL库的LINUX环境下的FY-3D和FY-4A遥感数据处理
  4. 【Web 安全】XSS 攻击详解
  5. Add和AddRange的区别
  6. java 套接字是什么_套接字是什么,套接字通信及其原理
  7. 太平洋游戏网暑期PSP导购专题(前言)
  8. 思想的肖像:苏格拉底(SOCRATES)(5)
  9. 宝塔面板wordpress“知更鸟”主题升级到php7.3,出现“警告错误提示”的解决办法
  10. groovy项目搭建