HTTP协议中的短轮询、长轮询、长连接和短连接
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP协议中的短轮询、长轮询、长连接和短连接相关的知识,希望对你有一定的参考价值。
参考技术A HTTP请求是基于请求/响应模式的,所以服务器端只要响应了HTTP请求就结束了。所谓的长短连接实际上指的是TCP连接,TCP是传输层协议,HTTP是应用层协议,长连接是在HTTP请求结束后,保留TCP连接供之后的HTTP请求使用这样可以共用一个TCP连接节省消耗。短轮询指服务端每次接到请求则立即返回结果。
长轮询指服务端接到请求如果没有立即返回的数据则保持连接直到数据到来或超时为止。
参考链接
https://www.cnblogs.com/lst619247/p/11001893.html
https://blog.csdn.net/SoundSlow/article/details/51220090?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
HTTP协议中的短轮询长轮询长连接和短连接
HTTP1.0协议不支持长连接,但都是基于TCP连接来说的
HTTP1.1协议默认是长连接,但都是基于TCP连接来说的,HTTP头部,Connection是keep-alive,但要服务器和客户端都设置,则可长连接。
HTTP协议是基于请求/响应模式的,因此只要服务端给了响应,本次HTTP连接就结束了,根本没有长连接这一说。
网络上说HTTP分为长连接和短连接,其实本质上是说的TCP连接。TCP连接是一个双向的通道,它是可以保持一段时间不关闭的,因此TCP连接才有真正的长连接和短连接这一说。
HTTP协议说到底是应用层的协议
TCP才是真正的传输层协议,只有负责传输的这一层才需要建立连接。
HTTP连接”这个词就不应该出现,它只是一个应用层的协议,实际上,说HTTP请求和HTTP响应会更准确一些,而HTTP请求和HTTP响应,都是通过TCP连接这个通道来回传输的。
不管怎么说,一定要务必记住,长连接是指的TCP连接,而不是HTTP连接。
长连接意味着连接会被复用,毕竟一直保持着连接不就是为了重复使用嘛。
长连接的好处:
长连接是为了复用,那既然长连接是指的TCP连接,也就是说复用的是TCP连接。那这就很好解释了,也就是说,长连接情况下,多个HTTP请求可以复用同一个TCP连接,这就节省了很多TCP连接建立和断开的消耗。
比如你请求了博客园的一个网页,这个网页里肯定还包含了CSS、JS等等一系列资源,如果你是短连接(也就是每次都要重新建立TCP连接)的话,那你每打开一个网页,基本要建立几个甚至几十个TCP连接,这浪费了多少资源就不用LZ去说了吧。
但如果是长连接的话,那么这么多次HTTP请求(这些请求包括请求网页内容,CSS文件,JS文件,图片等等),其实使用的都是一个TCP连接,很显然是可以节省很多消耗的。
另外,最后关于长连接还要多提一句,那就是,长连接并不是永久连接的。如果一段时间内(具体的时间长短,是可以在header当中进行设置的,也就是所谓的超时时间),这个连接没有HTTP请求发出的话,那么这个长连接就会被断掉。
这一点其实很容易理解,否则的话,TCP连接将会越来越多,直到把服务器的TCP连接数量撑爆到上限为止。现在想想,对于服务器来说,服务器里的这些个长连接其实很有数据库连接池的味道,大家都是为了节省连接重复利用嘛,对不对?
长轮询和短轮询
对于客户端来说,不管是长轮询还是短轮询,客户端的动作都是一样的,就是不停的去请求,不同的是服务端,短轮询情况下服务端每次请求不管有没有变化都会立即返回结果,而长轮询情况下,如果有变化才会立即返回结果,而没有变化的话,则不会再立即给客户端返回结果,直到超时为止。
这样一来,客户端的请求次数将会大量减少(这也就意味着节省了网络流量,毕竟每次发请求,都会占用客户端的上传流量和服务端的下载流量),而且也解决了服务端一直疲于接受请求的窘境。
但是长轮询也是有坏处的,因为把请求挂起同样会导致资源的浪费,假设还是1000个人停留在某个商品详情页面,那就很有可能服务器这边挂着1000个线程,在不停检测库存量,这依然是有问题的。
因此,从这里可以看出,不管是长轮询还是短轮询,都不太适用于客户端数量太多的情况,因为每个服务器所能承载的TCP连接数是有上限的,这种轮询很容易把连接数顶满。
长短轮询和长短连接的区别
这里简单说一下它们的区别,LZ这里只说最根本的区别。
第一个区别是决定的方式,一个TCP连接是否为长连接,是通过设置HTTP的Connection Header来决定的,而且是需要两边都设置才有效。而一种轮询方式是否为长轮询,是根据服务端的处理方式来决定的,与客户端没有关系。
第二个区别就是实现的方式,连接的长短是通过协议来规定和实现的。而轮询的长短,是服务器通过编程的方式手动挂起请求来实现的。
参考链接:
http://web.jobbole.com/85541/
以上是关于HTTP协议中的短轮询、长轮询、长连接和短连接的主要内容,如果未能解决你的问题,请参考以下文章