Home
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 设计模式
  • JavaSE
  • JVM
  • JUC
  • Netty
  • CPP
  • QT
  • UE
  • Go
  • Gin
  • Gorm
  • HTML
  • CSS
  • JavaScript
  • vue2
  • TypeScript
  • vue3
  • react
  • Spring
  • SpringMVC
  • Mybatis
  • SpringBoot
  • SpringSecurity
  • SpringCloud
  • Mysql
  • Redis
  • 消息中间件
  • RPC
  • 分布式锁
  • 分布式事务
  • 个人博客
  • 弹幕视频平台
  • API网关
  • 售票系统
  • 消息推送平台
  • SaaS短链接系统
  • Linux
  • Docker
  • Git
GitHub (opens new window)
Home
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 设计模式
  • JavaSE
  • JVM
  • JUC
  • Netty
  • CPP
  • QT
  • UE
  • Go
  • Gin
  • Gorm
  • HTML
  • CSS
  • JavaScript
  • vue2
  • TypeScript
  • vue3
  • react
  • Spring
  • SpringMVC
  • Mybatis
  • SpringBoot
  • SpringSecurity
  • SpringCloud
  • Mysql
  • Redis
  • 消息中间件
  • RPC
  • 分布式锁
  • 分布式事务
  • 个人博客
  • 弹幕视频平台
  • API网关
  • 售票系统
  • 消息推送平台
  • SaaS短链接系统
  • Linux
  • Docker
  • Git
GitHub (opens new window)
  • HTTP

    • Get 与 Post
    • 状态码&字段
    • 输入URL到返回页面全过程
    • HTTP
    • HTTP演进
    • HTTPS
    • WebSocket
    • RPC
    • 粘包问题
    • Java中的网络请求
    • 请求报文与响应报文
    • HTTP如何保存用户状态
    • 长连接与短连接
      • HTTP长连接
      • TCP长连接
      • WebSocket长连接
      • 长轮询
      • 长连接特性
      • 什么情况下不应该用长连接?
    • SSL TLS
  • TCP

  • UDP

  • IP

  • 网络安全

  • 计算机网络
  • HTTP
Nreal
2024-03-11
目录

长连接与短连接

# HTTP长连接

在HTTP 1.1协议中,默认开启了长连接,即Connection: keep-alive,使得多个HTTP请求/响应可以在一个TCP连接上连续传送,而不需要每次传输都建立新连接;

HTTP长连接可以减少连接和关闭的次数,降低延迟,提高效率,但它不是实时的,仍依赖请求-响应模式;

# TCP长连接

TCP长连接可以减少TCP握手和挥手的次数,适用于需要长时间保持连接的场景,如数据库连接、文件传输等;

使用TCP长连接时要考虑心跳机制,以便检测和维持连接的活性;

# WebSocket长连接

WebSocket协议提供了在单个TCP连接上进行全双工通信的能力;

允许服务器主动向客户端发送信息,适用于需要服务器实时推送数据到客户端的场景,如在线聊天、游戏、实时交易等;

在建立连接时需要进行一次握手,建立后可以持续不断地传输数据,直到任一方主动关闭连接;

# 长轮询

长轮询是对传统轮询的改进,客户端发起请求后,如果服务器没有数据,它不会立即返回,而是等到有数据时才响应;

长轮询可以减少请求的次数,提高数据实时性,但它仍然需要频繁地建立HTTP连接;

# 长连接特性

  • 减少连接建立的开销:由于不需要频繁建立和断开连接,长连接可以减少因为TCP握手或TLS握手带来的时间和资源开销;
  • 提高数据传输效率:长连接减少了每次数据交互都要建立连接的需要,从而降低了延迟,提高了数据传输的效率;
  • 保持会话状态:在一些需要保持会话状态的应用中,如数据库连接和文件传输,长连接可以简化会话管理;
  • 心跳机制:长连接通常需要通过心跳机制来检测和保持连接的活性,防止连接由于超时而被关闭;
  • 资源占用:与短连接相比,长连接会在其生命周期内持续占用系统资源,如端口和内存,这可能在一定程度上影响服务器的扩展能力;

# 什么情况下不应该用长连接?

长连接长久占据线程资源,在连接数量过多的情况下导致连接被打满;

扫码登陆 或 扫码支付 多半采用 HTTP 短轮询请求;

HTTP如何保存用户状态
SSL TLS

← HTTP如何保存用户状态 SSL TLS→

Theme by Vdoing | Copyright © 2021-2024
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式