当前位置: 首页 > news >正文

长连接和短连接

目录
  • 长连接和短连接
    • 概念
      • 总结与类比
    • TCP和UDP
    • HTTP的长短连接
      • HTTP 连接行为的演进
        • 1️⃣ 阶段一:HTTP/1.0 —— “用完即断”(Designed to Disconnect)
        • 2️⃣ 阶段二:HTTP/1.1 —— 引入 Keep-Alive(延迟断开)
    • 长连接/短连接协议对比一览表

长连接和短连接

概念

长连接这个概念的核心和本质是在传输层实现的,但它完全是为了应用层的需求而设计和服务的。

总结与类比

一个很好的类比是电话通话

  • TCP三次握手:就像你打电话给对方,对方接起来说“喂?”,你确认“是我,能听到吗?”,对方说“可以听到”。—— 连接建立
  • 短连接:你说一句“今天天气真好”,对方回一句“是的”。然后你们都说“再见”并挂断电话。下次有事,再重新拨号。——
  • 长连接:电话接通后,你们就一个话题聊了好几分钟,期间你来我往多次对话,但电话一直通着,没有挂断。直到你们觉得暂时没话说了,或者要休息了,才挂断。——
  • 应用层协议:就是你们在电话里沟通时使用的语言和规则(比如用中文聊业务,还是用英文聊技术)。你们选择一直通着电话(长连接),是为了让沟通(应用层的数据交换)更高效。

长连接是一个横跨传输层和应用层的概念。

  • 它的实现机制传输层(TCP连接的保持)。
  • 它的存在价值使用场景完全由应用层决定和应用层协议定义。

TCP和UDP

  • TCP是面向连接的,实现它的应用层协议可以是长连接也可以是短连接。
    • 长连接(如WebSocket、数据库连接池)或短连接(如默认的HTTP/1.0)
  • UDP是面向无连接的,没有长连接、短连接一说。
特性 TCP(短连接) UDP(无连接) TCP(长连接)
通信模式 连接 -> 收发数据 -> 断开连接 无连接,直接收发数据 连接 -> 多次收发数据 -> 断开连接
开销 每次都有握手和挥手的开销 几乎没有额外开销 一次握手和挥手,分摊到多次通信
状态 需要维护连接状态 无状态,每个数据报独立 需要长期维护连接状态
数据边界 字节流,无边界 保留数据边界 字节流,无边界

HTTP的长短连接

http设计初衷就是连一下断开,后面页面内容丰富,觉得立即断开不好,所以新加了超时才断开的设计。

http不长连接是服务器或者客户端主动断开了连接?

是的,HTTP 本身支持长连接(特别是 HTTP/1.1),所谓的“不长连接”,绝大多数情况下是【服务器(future.channel().close())】或【客户端(HTTP/1.0)】主动关闭了连接,而不是协议本身不能保持。

HTTP/1.0 为什么要断开连接?

  • “无状态 + 请求-响应”模型,适合资源获取
  • 保持连接消耗服务器资源,对大多数 Web 场景不划算
  • 及时释放连接可防资源泄漏、DDoS 攻击等

在大多数场景下,“断开”比“保持”更经济、更安全、更简单。

为什么HTTP/2/3可以转向长连接?

因为它们的应用场景和技术基础发生了变化:

  • 页面复杂度:现代网页包含数百个资源,高频次的请求使得长连接的优势压倒了其资源成本。
  • 技术成熟:服务器资源更充裕,连接管理技术更成熟。
  • 新需求:出现了服务端推送、实时通信等需要“持续对话”的新需求。

演进与平衡:从“必须断”到“按需不断”

  • HTTP/1.1的Keep-Alive:为了解决连续请求同一服务器时的性能开销(三次握手),引入了默认的持久连接。但它依然是请求驱动的——在完成一组请求后,连接仍然会在一段空闲时间后关闭。
  • HTTP/2的革命:引入了真正的多路复用长连接。一个TCP连接可以并行处理多个请求/响应流。这时,维持一个高质量的长期连接变得非常有价值,因为它避免了队头阻塞,大幅提升了性能。
  • HTTP/3的再进化:基于QUIC协议,进一步优化了连接建立和迁移,使得长连接在移动和复杂网络环境下更加稳健。

HTTP的演进史,就是随着场景和技术的变化,不断重新校准这个平衡点的过程。从1.0的“一刀切断开”,到1.1的“按需保持”,再到2/3的“精心维护长连接”,都体现了这种务实的设计哲学。

HTTP 连接行为的演进

1️⃣ 阶段一:HTTP/1.0 —— “用完即断”(Designed to Disconnect)
  • 出现时间:1996 年
  • 使用场景:静态文本、简单 HTML 页面
  • 特点:
    • 每个请求都建立一个新的 TCP 连接
    • 响应完成后立即关闭连接
    • 不支持持久连接(除非手动加 Connection: keep-alive 扩展)

📌 问题暴露:
一个页面有 HTML + 5 张图 + 2 个 JS → 要建 8 次 TCP 连接 → 每次都要三次握手 + 四次挥手 → 延迟高、资源浪费!

2️⃣ 阶段二:HTTP/1.1 —— 引入 Keep-Alive(延迟断开)
  • 出现时间:1999 年(RFC 2616)
  • 改进核心:默认开启持久连接
  • 新规则:
    • 同一个 TCP 连接上可以发送多个请求/响应
    • 连接不会立即断开,而是进入“空闲状态”
    • 等待一段时间(如 30s~75s)无新请求后,才由服务端主动关闭

🔧 关键头部:

# 含义:最多处理 100 个请求,空闲超过 30 秒就关。
Connection: keep-alive
Keep-Alive: timeout=30, max=100

长连接/短连接协议对比一览表

特性维度 HTTP/1.0 HTTP/1.1 HTTP/2 WebSocket TCP + 自定义协议
默认连接模型 短连接 持久连接 多路复用的持久连接 全双工长连接 完全自定义
连接生命周期 请求-响应-关闭 多个请求-响应-空闲超时关闭 多个请求/响应流-空闲超时关闭 握手-持续通信-显式关闭 完全由应用逻辑控制
数据流向 单向 (客户端发起) 单向 (客户端发起) 双向 (客户端发起,服务端可推送) 全双工 (双方可随时主动发送) 完全自定义 (通常为全双工)
协议开销 高 (每次TCP握手) 中 (复用连接,但文本头部冗余) 低 (二进制帧,头部压缩) 低 (握手后仅有2-14字节帧头) 极低 (完全自定义,无冗余)
服务器推送 不支持 不支持 支持 (提前推送资源) 天然支持 (双向通信) 可实现
多路复用 不支持 不支持 (管道化有队头阻塞) 支持 (解决队头阻塞) 不适用 (消息本身就是独立的) 可实现
设计复杂度 中 (帧、流等概念) 中 (帧协议、心跳保活) (需自己设计所有规则)
主要优势 实现简单,无状态 减少TCP握手开销,兼容性好 高性能,头部压缩,服务器推送 真正的实时双向通信,低延迟 极致性能,完全灵活,私有特性
主要劣势 性能极差,资源浪费 队头阻塞,文本头部冗余 实现相对复杂,TCP层队头阻塞 非请求-响应模型,与HTTP生态不同 开发成本高,需要处理所有底层细节
http://www.rkmt.cn/news/49717.html

相关文章:

  • 洛谷题单指南-组合数学与计数-P1287 盒子与球
  • 2025 年最新推荐铝板厂家排行榜,涵盖 5052/6061/7075 铝板及纯铝板/高纯铝板优质供应商精选
  • 2025 年 11 月铝合金门窗厂家推荐排行榜,断桥门窗,系统门窗,金属门窗,阳台门窗,平开推拉折叠门窗公司精选
  • 2025 年 11 月电动调节阀厂家推荐排行榜,西门子/霍尼韦尔/鲁泽节能,比例阀/蒸汽温控阀/二通阀/阀执行器公司精选
  • P9902 『PG2』模拟最大流 题解
  • 弧焊工业机械手混合气体实用方法
  • XXL-JOB从入门到进阶——架构架构、核心原理
  • 2025年自动挤出机订做厂家权威推荐榜单:挤出造粒机/实验室挤出机/双螺杆挤出机源头厂家精选
  • POSTROUTING 数据包离开前,路由之后 SNAT(源地址转换),源地址转换出去前
  • 使用ollama本地部署Embedding模型bge-large-zh-v1.5 - yi
  • LLM应用剖析: 舆情分析多智能体-微舆BettaFish
  • 2025年CHRO战略指南发布,头部厂商易路提供“三位一体”数智化落地路径
  • 化工产线再升级,稳定互联profinet转devicenet网关连接技术研究
  • 2025 11 14
  • 用户头像文件存储机制是如何实现的?
  • 2025年家具定制厂家权威推荐榜单:智能全屋定制家居/全屋定制/全屋定制家具源头厂家精选
  • 学习sql笔记
  • P10360 [PA 2024] Desant 3
  • 典枢平台“数据经纪人”功能:打通数据供需,高效实现数据变现
  • 2025 年 11 月一力油漆/一力涂料厂家推荐排行榜:醇酸油漆,环氧富锌底漆,丙烯酸聚氨酯油漆优质品牌精选
  • 2025年模块电源十大品牌权威排行榜揭晓,铁路电源/军用电源/新能源车载逆变电源/光伏电源/辅助应急电源/电源模块/高功率密度电源厂商排行榜
  • 2025年塑料皮带轮批发厂家权威推荐榜单:塑料电机齿轮/尼龙圆柱齿轮/塑料齿轮源头厂家精选
  • 102302104刘璇-数据采集与融合技术实践作业3
  • Objective-C 使用YYModel配合AI工具高效创建iOS数据模型
  • Pandas --Series序列
  • Java 并行编程
  • Linux Shell脚本基础语法
  • 不懂 Attention 不算懂 AI?十大奠基论文(一):一文读懂《Attention Is All You Need》
  • PCBA方案设计——充气泵的工作原理是什么?
  • 楼宇间网络拓扑测绘 从原理到精准部署