谈谈HTTP协议中的短轮询、长轮询、长连接和短链接

undefined

在之前总结WebSocket的时候就已经提到过短长轮询了~~今天看公众号文章,又把长短连接引进来一起分析。感觉这种总结很棒,那么我们一起看看呗

长短连接

听说长短连接的话,应该都是这一句吧:HTTP1.0协议不支持连接,从HTTP1.1协议以后,连接默认是长连接。

HTTP协议是基于请求/响应模式的,因此只要服务端给了响应,本次HTTP连接就结束了,或者更准确的说,是本次HTTP请求就结束了,根本没有长连接这一说。那么自然也就没有短连接这一说了。

之所以网络上说HTTP分为长连接和短连接,其实本质上是说的TCP连接。TCP连接是一个双向的通道,它是可以保持一段时间不关闭的,因此TCP连接才有真正的长连接和短连接这一说。

其实知道了以后,会觉得这很好理解。HTTP协议说到底是应用层的协议,而TCP才是真正的传输层协议,只有负责传输的这一层才需要建立连接。

于是,我们就知道了,长连接指的是TCP连接,不是HTTP连接。理解了这一点之后,我们再来看,把所有的请求都默认为长连接有什么作用。

因为长连接意味着连接被复用,那么这里复用的是TCP通道。于是,一个网站上的多个HTTP请求可以复用同一个TCP连接,这也就是节省了很多TCP连接建立和断开的消耗。于是,我们就懂了,为啥HTTP1.1要默认长连接,因为短连接几乎没有好处啊~

那么第二个问题:怎么设置长连接呢?
很简单,只要设置Connection为keep-alive。当然是的,但要服务器和客户端(HTTP1.1默认)都设置。

另外,最后关于长连接还要多提一句,那就是,长连接并不是永久连接的。如果一段时间内(具体的时间长短,是可以在header当中进行设置的,也就是所谓的超时时间),这个连接没有HTTP请求发出的话,那么这个长连接就会被断掉。

这一点其实很容易理解,否则的话,TCP连接将会越来越多,直到把服务器的TCP连接数量撑爆到上限为止。现在想想,对于服务器来说,服务器里的这些个长连接其实很有数据库连接池的味道,大家都是为了节省连接重复利用嘛,对不对?

长轮询短轮询

这里在我学习websocket的时候已经详细说过了~~这里稍微再补充一下自己的理解吧。
轮询:轮-> 循环; 询: 查询;
也就是长短轮询,就是周期短或者周期长的循环查询服务器信息。那么周期怎么算呢?客户端发起的信息那一刻到服务器应答,就算一个周期。

于是长短轮询就能很快区别开来了,长轮询,不停地问服务器拿信息,但是服务器很久才回答你(信息有更新再回答)。短轮询,不停地问服务器拿信息,服务器会马上告诉你情况。

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

  • 决定的方式;一个TCP连接是否为长连接,通过设置HTTPde Connection Header来决定的,而且是要客户端和服务器都设置;轮询的决定权是在于服务器的处理方式,客户端没办法解决
  • 实现方式,连接的长短由协议来规定和实现。而轮询是依赖编程方式手动挂起请求实现的。

这里是来自别人的思路分享文章,因为没有别人的思路历程直接copy也是不太好。哪里看不明白,建议直接跳转。


谈谈HTTP协议中的短轮询、长轮询、长连接和短链接