长连接和短连接

本文首发于微信公众号:聊点技术,原文标题《长连接和短连接

HTTP的长连接和短连接

HTTP1.0中每一个请求和响应都会触发一次TCP连接的建立和断开,此为短连接。在HTTP1.1中增加了keep-alive机制,允许在一个TCP连接上发送多个请求和响应,此为长连接。HTTP请求头部中的Connection标识是否开始长连接,当为Connection: keep-alive时,表明使用长连接(通常无需设置,默认);当不希望使用长连接,则设为Connection: close.
在这里插入图片描述
开启长连接需要客户端与服务端都支持长连接。当使用了长连接后,在访问某个网站时,客户端和服务器之间用于传输数据的TCP连接在进行一次数据传输后不会立即关闭,客户端再次访问服务器上的网页时,会继续使用已经建立的TCP连接。keep-alive有过期时间,不会一直保持连接,可以在服务器软件(如Nginx)中设置过期时间。
HTTP长连接和短连接实质上是TCP的长连接和短连接。HTTP是应用层协议,TCP是传输层协议,在网络层使用IP协议。IP协议主要解决网间路由和寻址,TCP协议主要解决在应用进程之间提供可靠传输。

TCP的长连接和短连接

TCP长连接指在建立完成连接链路后,在链路空闲时并不关闭连接。长连接省去了创建连接的耗时,多应用于保持通信的场景,如消息推送,链路复用等。
TCP短连接指在每次通信结束后,中断连接,下次通信时重新建立连接。短连接管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段。

TCP的保活功能

TCP的保活(keep-alive)功能主要在服务器中使用。设想一下,服务器和客户端开启了长连接,如果客户端主机突然断电、重启或进程突然崩溃等情况,服务器如何知道与客户的这条连接已经不可用了。保活功能试图在服务器检测到客户端已经消失的半开放连接。

当客户端突然断电,服务器如何知道

  1. 在应用层实现心跳包程序。开启新线程,定时向对端发送报文,查看是否有ACK。
  2. 启用TCP里的保活功能。TCP内嵌的一个心跳包,如果当A检测到和B超过2小时没有数据传输,那么会向B发送一个keep-alive packet:
  • 如果B仍然存在,会回复一个ACK,A在收到ACK后重置计时器。
  • 如果B异常关闭或网络异常(不可达),A不会收到对探测的响应报文,A端探测报文的超时时间设为75s。当探测报文超时后,重新发送新的探测报文,共发送10个探测报文,每个间隔75秒。如果这10个报文都没有收到响应,就认为B已经关闭,则将该TCP连接关闭。
  • 如果B曾经崩溃但已重启,A会收到一个RST报文,则A将关闭该TCP连接。

易混淆的keep-alive

TCP的keep-alive是检查当前TCP连接是否已经关闭;
HTTP的keep-alive是要让一个TCP连接活久点。

本文首发于微信公众号:聊点技术,原文标题《长连接和短连接

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值