长短连接,长短轮询

2023-11-23 17:30
文章标签 连接 轮询 长短

本文主要是介绍长短连接,长短轮询,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

长短连接


常见的网上说http分为长连接和短连接,其实本质上是说的TCP连接。TCP连接是一个双向的通道,它是可以保持一段时间不关闭的,因此TCP连接才有真正的长连接和短连接这一说法。HTPP协议是应用层协议,而TCP是传输层协议,只有负责传输的这一层才需要建立连接。

短连接

所谓短连接,即连接只保持在数据传输过程,请求发起,连接建立,数据返回,连接关闭。它适用于一些实时数据请求,配合轮询来进行新旧数据的更替。短连接的流程就是:建立连接->发送数据->断开连接。一次发送之后立即断开连接。

 

长连接

HTTP1.0(可以设置头文件Keep-Alive,Connection)、HTTP1.0(默认长连接)、HTTP2.0(管道式连接)

所谓长连接,即连接建立后,在请求关闭连接前客户端与服务端一直保持连接,实质是保持这个通信管道,之后便可以对其进行复用。例如一个页面有很多文件,JS文件,CSS文件等等,不能每次都要建立一次连接,所以长连接是比较好的解决办法。

需要注意的是长连接并不是永久连接的。如果一段时间内(header内可设置超时时间),这个连接没有HTTP请求发出的话,那么这个长连接就会被断掉。即 长时间没有响应,超时会自动断开。

它适用于涉及消息推送,请求频繁的场景(直播,流媒体)。连接建立后,在该连接下的所有请求都可以重用这个长连接管道,避免了频繁了连接请求,提升了效率。

                            

长短连接的示图

                                


 

 

长短轮询


所谓轮询,即是在一个循环周期内不断发起请求来得到数据的机制。只要有请求的地方,都可以实现轮询

 

1.概念

轮询:客户端定时去请求服务端,每一次请求都立即返回结果,根据新旧数据对比决定是否使用这个结果。可以理解为客户端主动请求来促使数据更新

长轮询:客户端请求服务端,但是服务端并不是即时返回,这个过程服务器挂起;只有当内容更新时才返回内容给客户端。客户端接收并处理数据后再进行下一次请求。从流程上讲,可以理解为服务器向客户端推送内容

 

2.具体实现

轮询:前端使用定时器,每间隔一段时间发送请求来获取数据是否更新,这种方式可兼容ie和支持高级浏览器。通常采用 setInterval 或者 setTimeout 实现。

通过递归的方式,每隔一定时间再次发送请求,这样虽然无法保证两次请求间隔为指定时间,但是获取的数据顺序得到保证。

                                                                    


长轮询

客户端像传统轮询一样从服务端请求数据,服务端挂起不会立刻返回,直到有数据或超时才返回给客户端,然后关闭连接,客户端处理完响应信息后再向服务器发送新的请求。

长轮询解决了频繁的网络请求浪费服务器,资源可以及时返回给浏览器。
                                                                       
 

3.代码比较

轮询:

利用 Ajax,通过 setInterval 定时向后端发送请求

  1. 优点:实现简单
  2. 缺点:数据同步不及时,增加后端处理压力
  3. 场景:适用于对消息及时性要求不高且服务器资源充足的开发
//前端    
setInterval(function() {$.ajax({url: 'https://www.baidu.com/',success: function() {//success code}});
}, 3000);       //每隔固定时间请求一次//服务端    
public ActionResult NoLongPolling(){return Content(DateTime.Now.ToString());      //请求即响应
}

 

长轮询

在 Ajax 轮询的基础上做的改进,后端数据没有更新时不返回数据,保存连接;直到后端有数据变化,则响应请求并关闭连接。前端收到数据后,再次向后端发起请求

  1. 优点:通信及时,服务端资源消耗低
  2. 缺点:请求交替时消息会延迟
  3. 场景:扫码登录
//前端
function async () {$.ajax({url: 'http://www.baidu.com/',success: function() {async ();       收到服务器响应后再请求//code from here} });
}//服务端
public ActionResult LongPolling() {while (true) {Thread.Sleep(1000);       // 模拟挂起的操作,return Content(DateTime.Now.ToString());   //服务器每秒会有更新,然后返回给客户端实时数据}
}

 

4.两者的特点比较

轮询:

  • 特点:每隔固定时间请求服务器一次
  • 缺点
    • 大量耗费服务器资源和宽带资源
      • 因为客户端按固定频率请求服务器,很多时候 并没有新的数据更新,因此绝大部分请求都是无效请求,浪费服务器资源。
    • 数据不一定是实时更新,基本会有延迟。
      • setTimeout 在等到每次 EventLoop 时,都要判断是否到指定时间,直到时间到再执行函数,一旦遇到页面有大量任务或者返回时间特别耗时,数据返回就会有延迟(页面“假死”)
  • 优点:编写简单

 

长轮询

  • 特点:只有收到服务器端响应响应后,再发出请求
  • 优点:
    • 在无消息的情况下(数据没有更新)不会频繁的请求
    • 数据实时更新
  • 缺点
    • 服务器挂起(保持连接)会消耗资源

 

 

长短轮询和长短连接的区别


一个TCP连接是否是长短连接,是通过HTTP的header中设置Connection来决定的。即通过协议规定实现

一个HTTP请求是否是长短轮询,是通过前后端的处理方式决定的,前端是否设置时间间隔请求,后端是否设置挂起请求。即通过编程方式实现

 

 

关于服务器挂起

服务器挂起:数据库因为缺少某种资源而阻止服务器响应服务请求。这种服务请求被称为服务器挂起。

服务器挂起不会表现为服务器崩溃,但服务器挂起之后可能会崩溃。例如,由于故障(死锁)或者大量请求的缘故,可能没有任何可用的执行线程来完成工作,所有执行线程都被占用或忙于处理以前的请求。

在出现以下情况时服务器会挂起:
1.服务器不响应新的请求。
2.请求超时。
3.请求处理的时间越来越长。

 

 

 

参考:轮询与长轮询  

服务端推送通信技术及其优劣势

TCP长连接,短连接,HTTP短轮询、长轮询

 

 

这篇关于长短连接,长短轮询的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/419581

相关文章

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

SpringBoot连接Redis集群教程

《SpringBoot连接Redis集群教程》:本文主要介绍SpringBoot连接Redis集群教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 依赖2. 修改配置文件3. 创建RedisClusterConfig4. 测试总结1. 依赖 <de

java连接opcua的常见问题及解决方法

《java连接opcua的常见问题及解决方法》本文将使用EclipseMilo作为示例库,演示如何在Java中使用匿名、用户名密码以及证书加密三种方式连接到OPCUA服务器,若需要使用其他SDK,原理... 目录一、前言二、准备工作三、匿名方式连接3.1 匿名方式简介3.2 示例代码四、用户名密码方式连接4

MySQL 表的内外连接案例详解

《MySQL表的内外连接案例详解》本文给大家介绍MySQL表的内外连接,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录表的内外连接(重点)内连接外连接表的内外连接(重点)内连接内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

电脑蓝牙连不上怎么办? 5 招教你轻松修复Mac蓝牙连接问题的技巧

《电脑蓝牙连不上怎么办?5招教你轻松修复Mac蓝牙连接问题的技巧》蓝牙连接问题是一些Mac用户经常遇到的常见问题之一,在本文章中,我们将提供一些有用的提示和技巧,帮助您解决可能出现的蓝牙连接问... 蓝牙作为一种流行的无线技术,已经成为我们连接各种设备的重要工具。在 MAC 上,你可以根据自己的需求,轻松地

宝塔安装的MySQL无法连接的情况及解决方案

《宝塔安装的MySQL无法连接的情况及解决方案》宝塔面板是一款流行的服务器管理工具,其中集成的MySQL数据库有时会出现连接问题,本文详细介绍两种最常见的MySQL连接错误:“1130-Hostisn... 目录一、错误 1130:Host ‘xxx.xxx.xxx.xxx’ is not allowed

MySQL 多表连接操作方法(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN)

《MySQL多表连接操作方法(INNERJOIN、LEFTJOIN、RIGHTJOIN、FULLOUTERJOIN)》多表连接是一种将两个或多个表中的数据组合在一起的SQL操作,通过连接,... 目录一、 什么是多表连接?二、 mysql 支持的连接类型三、 多表连接的语法四、实战示例 数据准备五、连接的性

MySQL中的分组和多表连接详解

《MySQL中的分组和多表连接详解》:本文主要介绍MySQL中的分组和多表连接的相关操作,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录mysql中的分组和多表连接一、MySQL的分组(group javascriptby )二、多表连接(表连接会产生大量的数据垃圾)MySQL中的

MySQL中的交叉连接、自然连接和内连接查询详解

《MySQL中的交叉连接、自然连接和内连接查询详解》:本文主要介绍MySQL中的交叉连接、自然连接和内连接查询,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、引入二、交php叉连接(cross join)三、自然连接(naturalandroid join)四