短连接和长连接有什么区别?一张表讲清

短连接是每次通信都新建一条 TCP 连接、用完立即关闭;长连接是建立一次后持续复用,后续请求都走这条连接。HTTP/1.0 默认短连接,HTTP/1.1 默认开启 keep-alive 长连接。本文用对照表讲清两者的开销、适用场景与长连接的代价,并说明“短链接”是网址缩短,跟短连接不是一回事。

短连接和长连接有什么区别?一张表讲清

短连接和长连接的区别只有一句话:短连接是每次通信都新建一条 TCP 连接、数据传完立即关闭;长连接是建立一次之后持续保持,后续多次通信复用同一条连接。HTTP/1.0 默认使用短连接,HTTP/1.1 默认开启 keep-alive,也就是长连接。选哪种取决于通信频率和实时性要求,不是越长越好。

一张表看区别

维度短连接长连接
连接次数每次请求都新建建立一次,多次复用
握手开销每次都经历三次握手、四次挥手只在建立时握手一次
资源占用连接用完即释放,服务端压力小长期占用内存与文件描述符
实时性较差,需客户端主动请求较好,可配合推送机制
典型场景低频接口调用、静态资源请求数据库连接池、消息队列、即时通讯

短连接贵在握手

一条 TCP 连接建立要三次握手,关闭要四次挥手,加上 TLS 握手,往返时延会叠加好几次。网页打开时要加载几十个资源,如果每个资源都新建连接,光握手就消耗大量时间。HTTP/1.1 的 keep-alive 让浏览器复用同一条连接,减少重复握手与慢启动;HTTP/2 在一条连接上做多路复用,把请求拆成独立的流并行传输,进一步减少了排队等待。

长连接的代价

长连接不是免费的:中间的网络设备(NAT、防火墙、负载均衡)会清理长时间空闲的连接表项,双方却未必知道,所以要定期发心跳包保活;每条连接在服务端都占内存和文件句柄,连接数上万时资源压力明显;连接一旦建立就绑定到某个后端实例,扩容缩容时要考虑连接如何迁移。因此长连接通常配合连接池、超时回收和心跳机制一起使用。

“短链接”是另一件事

很多人把“短连接”和“短链接”混为一谈。短链接是把长网址压缩成短网址的服务,属于应用层的网址映射,访问时通过 301 或 302 跳转到原始地址;短连接说的是传输层的连接复用方式。前者关心的是网址长度与跳转,后者关心的是连接建立与关闭,两者没有直接关系。

常见问题

keep-alive 就是长连接吗?

keep-alive 是 HTTP 协议层实现长连接的方式,让同一条 TCP 连接上可以连续处理多个请求;除此之外,数据库连接池、WebSocket 也都是长连接的不同实现。

长连接会一直不断吗?

不会。服务端通常设置空闲超时,超时后主动关闭;中间设备也可能清理连接表项,所以需要心跳包维持。

什么时候该用短连接?

请求频率低、每次交互独立、不需要服务端主动推送的场景,用短连接实现简单、资源占用少。

短链接和短连接是一回事吗?

不是。短链接是把长网址缩短并跳转,短连接是 TCP 连接的建立与关闭方式。

避坑提示:调试接口时如果遇到“偶发超时、重试就好”,先看服务端和中间设备的空闲超时设置是否短于客户端的连接复用时间;长连接数量上来后要监控文件句柄与内存,别等到连接数打满才发现问题。

版权声明:本站文章大部分为原创,有小部分整理于自互联网。主要目的在于分享信息,版权归原作者所有,内容仅供读者参考。如有侵权请发送邮件至shenma006@gmial.com删除。备案号:晋ICP备2023001592号-1
赞 (0)

相关推荐

发表回复

登录后才能评论