当前位置:首页 > 技术积累 > 正文内容

HTTP长连接与短连接、长轮询与短轮询及长轮询的实现概述

竹林之风3年前 (2019-06-09)技术积累1448

        HTTP长连接(long connection)与短连接(short connection)本质上是TCP长连接和短连接:短连接是指在一次HTTP请求和响应之后立即关闭本次TCP连接,下次请求响应重建一个新的TCP连接;而长连接是指请求响应之后并不立即关闭本次TCP连接,下次请求响应继续重用该TCP连接。HTTP/1.0默认短连接,HTTP/1.1起默认长连接,长连接通过请求头Connection: keep-alive启用长连接、通过Keep-Alive: timeout=20设置长连接的超时时间(秒)。


相同点不同点
HTTP长连接都是基于TCP连接,并无本质不同;由HTTP请求头Connection: keep-alive控制是否长/短连接。

1、使用次数:重用多次;

2、关闭时机:超时后才关闭该TCP连接,由Keep-Alive: timeout=20控制超时时间(秒)。

HTTP短连接

1、使用次数:仅使用一次;

2、关闭时机:一次HTTP请求响应后立即关闭该TCP连接

        而HTTP长轮询(long polling)是指服务端收到请求后若有数据立即返回,若无数据则保持到有数据或一段时间后超时,浏览器收到响应后立即重新发送相同的请求;HTTP短轮询(short polling)是指服务端收到请求后无论是否有数据都立即返回,浏览器收到响应后间隔一段时间后重新发送相同的请求。轮询建立在连接基础上,轮询是长是短与连接是长是短无关。


相同点不同点
HTTP长轮询都是基于HTTP连接,都将重复发送相同请求。

1、请求发送频率:浏览器端收到HTTP响应后立即重复发起相同HTTP请求;

2、服务器端处理机制:有数据时立即响应,无数据时等待数据或直到超时;

3、特点:获取数据比较实时,服务器端需要较多资源以维持众多长轮询。

HTTP短轮询

1、请求发送频率:浏览器端收到HTTP响应后间隔一段自定义时间后重复发起相同HTTP请求;

2、服务器端处理机制:无论是否有数据都立即响应;

3、特点:获取数据不实时,通过浏览器端脚本即可实现。


image.png

        HTTP长轮询主要用于实现需要实时获取数据的地方,例如:即时消息、实时股票价格等,其主要技术要点在于服务端无数据时如何保持到有数据或超时。另外在请求发生频率上,长轮询也可以在如短连接一样收到响应后间隔一段时间后才发送,只是会不够实时;短轮询也可以如长连接一样在收到响应后立即发送,只是会给服务器端造成过大压力。

        总而言之,实现长轮询需在服务器端异步的基础上,使用如下等方式检测是否有新数据:

(1)死循环检测,需设置死循环自动退出条件,并且需要配合线程休眠;

(2)计时器定时检测,需设置计时器自动停止条件;

(3)发布订阅方式,增删改数据之处发布消息,检测新数据之处订阅该消息;

(4)锁方式,若无新数据获取锁失败,有新数据时获取锁成功;

(5)其它能实现线程阻塞的方式。

扫描二维码推送至手机访问。

版权声明:本文由久爱编程网发布,如需转载请注明出处。

本文链接:http://www.9icode.com/index.php/post/35.html

标签: IT
分享给朋友:

相关文章

ASP.NET中报“无法在已发送HTTP标头之后进行重定向”异常问题解决

ASP.NET中报“无法在已发送HTTP标头之后进行重定向”异常问题解决

        ASP.NET中报“无法在已发送HTTP标头之后进行重定向”异常时,其中一个原因是:在已经重定向后又重定向。在ASP.NET中实现重定向有以下几...

ASP.NET中报“无法在已发送HTTP标头之后设置状态”异常问题解决

ASP.NET中报“无法在已发送HTTP标头之后设置状态”异常问题解决

        ASP.NET中报“无法在已发送HTTP标头之后设置状态”异常,是因为设置Response的StatusCode之前,程序已设置响应标头。可从以...

ASP.NET网站自定义错误处理及其它安全相关

ASP.NET网站自定义错误处理及其它安全相关

        ASP.NET网站在运行过程中总是有可能报错,例如404等HTTP错误、500等程序异常。在IIS托管并报错的情况下,网站的默认行为依次是:(1).NET运行时接收并处理的部分显示.N...

从被扫描记录看网站安全应该注意的一些细节

从被扫描记录看网站安全应该注意的一些细节

1、尽可能地隐藏服务器真实IP,减少攻击目标。例如使用负载均衡、网关等作为门户,由负载均衡或网关转发到后端服务器。2、服务器必须开放的服务(除HTTP、HTTPS等为公众开放的服务外),尽可能改为其它较大的不常用的端口号,这样攻击者需要扫描...

ASP.NET Core网站报“An assembly specified in the application dependencies manifest was not found”异常解决

ASP.NET Core网站报“An assembly specified in the application dependencies manifest was not found”异常解决

        ASP.NET Core网站报“An assembly specified in the application dependencies ma...

ASP.NET MVC WebApi控制器方法使用async假死超时问题

ASP.NET MVC WebApi控制器方法使用async假死超时问题

        在一个ASP.NET MVC WebApi控制器方法中使用async标记为异步方法后,有时会假死超时。根本原因是同步方法和异步方法混合造成的死锁...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。