tcp协议中的长连接和短连接服务器,谈谈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 也是不太好。哪里看不明白,建议直接跳转。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值