前言:
目前我们对“http长轮询”可能比较讲究,各位老铁们都想要分析一些“http长轮询”的相关知识。那么小编也在网摘上汇集了一些关于“http长轮询””的相关知识,希望咱们能喜欢,小伙伴们一起来学习一下吧!一、前言
相信很多人在看HTTP协议相关的文章时,都能看到这么一句话:HTTP1.0协议不支持长连接,从HTTP1.1协议以后,连接默认都是长连接。
那怎样才算是把HTTP变成了长连接?是不是只要设置了 Connection:keep-alive 就可以了?
其实观察我们平时开发的Web应用的HTTP头部,Connection也确实是keep-alive,那就是说我们大部分时间都是用的长连接,但是长连接一般用于交互比较频繁的应用,像普通的Web应用,比如个人博客这种,长连接的用处何在?答案皆在下文。
二、长短连接
HTTP协议其实是没有长短连接一说的,HTTP协议是基于请求/响应模式的,因此只要服务端给了响应,本次HTTP连接就结束了,更准确地说是本次HTTP请求就结束了,根本没有长连接这么一说。那么自然也就没有短连接这么一说了。
之所以说HTTP分为长连接和短连接,其实本质上是说的TCP连接。TCP连接是一个双向的通道,它是可以保持一段时间不关闭的,因此TCP连接才有真正的长连接和短连接这一说。
HTTP协议说到底是应用层的协议,而TCP才是真正的传输层协议,只有负责传输的这一层才需要建立连接。
2.1、疑问解答
2.1.1、是不是只要设置Connection为keep-alive就算是长连接了?
当然是的,但要服务器和客户端都设置。
2.1.2、平时用的是不是长连接?
这个也毫无疑问是的。(现在用的基本上都是HTTP1.1协议,基本上Connection都是keep-alive。而且HTTP协议文档上也提到了,HTTP1.1默认是长连接,也就是默认Connection的值就是keep-alive)。
2.1.3、普通的Web应用(比如个人博客)用长连接有啥好处?需不需要关掉长连接而使用短连接?
刚才已经说了长连接是指的TCP连接,长连接的目的也是为了复用(复用TCP连接)。在长连接情况下,多个HTTP请求可以复用同一个TCP连接,这就节省了很多TCP连接建立和断开的消耗。
比如你请求博客的一个网页,这个网页里肯定还包含了CSS、JS等等一系列资源,如果是短连接(也就是每次都要重新建立TCP连接)的话,那你每打开一个网页,基本要建立几个甚至几十个TCP连接,这浪费了很多资源。
但如果是长连接的话,那么这么多次HTTP请求(这些请求包括请求网页内容,CSS文件,JS文件,图片等等),其实使用的都是一个TCP连接,很显然是可以节省很多消耗的。
最后长连接并不是永久连接的。如果一段时间内(具体的时间长短,是可以在header当中进行设置的,也就是所谓的超时时间),这个连接没有HTTP请求发出的话,那么这个长连接就会被断掉。
三、长短轮询
3.1、长轮询
3.1.1、介绍
http长轮询是server端收到请求后如果有数据,立刻响应请求;
如果没有数据就会停留一段时间,这段时间内,如果 server 请求的数据到达(如查询数据库或数据的逻辑处理完成),就会立刻响应;
如果这段时间过后,还没有数据到达,则以空数据的形式响应http请求;
若浏览器收到的数据为空,会再次发送同样的http请求到server;
3.1.2、缺点
server 没有数据到达时,http连接会停留一段时间,这会造成服务器资源浪费。
3.2、短轮询
3.2.1、介绍
http 短轮询是 server 收到请求不管是否有数据到达都直接响应http请求;
如果浏览器收到的数据为空,则隔一段时间,浏览器又会发送相同的http请求到server 以获取数据响应;
3.2.2、缺点
消息交互的实时性较低(server端到浏览器端的数据反馈效率低)。
3.3、长短轮询的异同
3.3.1、相同点
当server 的数据不可达时,基于http长轮询和短轮询 的http请求,都会停留一段时间。
3.3.2、不同点
http长轮询是在服务器端的停留;而http 短轮询是在浏览器端的停留。
3.3.3、性能总结
不管是长轮询还是短轮询,都不太适用于客户端数量太多的情况,因为每个服务器所能承载的TCP连接数是有上限的,这种轮询很容易把连接数顶满。
标签: #http长轮询