WebSocket入门

文章目录

    • [1. 工作原理:握手过程](#1. 工作原理:握手过程)
    • [2. 核心特点](#2. 核心特点)
    • [3. 缺点](#3. 缺点)
    • [4. websocket怎么实现重连](#4. websocket怎么实现重连)
    • [5. 即时通讯方案比较](#5. 即时通讯方案比较)
      • [5.1. 与SSE区别](#5.1. 与SSE区别)
      • [5.2. 与HTTP 区别](#5.2. 与HTTP 区别)

WebSocket 是一种在 单个 TCP 连接 上进行 全双工 通信的协议

WebSocket原理

​ 客户端向 WebSocket 服务器通知(notify)一个带有所有接收者ID(recipients IDs)的事件(event),服务器接收后立即通知所有活跃的(active)客户端,只有ID在接收者ID序列中的客户端才会处理这个事件

1. 工作原理:握手过程

WebSocket 的建立需要经过一个"握手"阶段,它利用了 HTTP 协议来完成升级

  1. 客户端发起请求 :发送一个带有 Upgrade: websocket 头的 HTTP 请求
  2. 服务器响应 :如果支持,返回 101 Switching Protocols 状态码
  3. 协议切换:此时 HTTP 连接正式升级为 WebSocket 连接,双方开始自由交谈

2. 核心特点

  • 全双工(双向通信):服务器可以主动发消息给客户端,客户端也可以随时发给服务器
  • 实时性强:省去了 HTTP 的握手和繁琐的 Header,数据包极小(头部仅 2~10 字节)
  • 长连接:连接建立后除非主动关闭或网络断开,否则一直存在
  • 跨域支持:WebSocket 天生支持跨域,不需要像 HTTP 那样配置繁琐的 CORS

3. 缺点

  • 需要额外的开销: WebSocket需要在服务器上维护长时间的连接,这需要额外的开销,包括内存和CPU。在高并发场景下(如十万级用户同时在线),服务器的内存会被大量活着的连接耗尽
  • 安全问题: 由于WebSocket允许服务器主动向客户端发送数据,可能会存在安全问题。服务器必须保证只向合法的客户端发送数据

4. websocket怎么实现重连

要实现坚固的重连机制,通常需要结合 心跳检测指数退避算法

一个重连方案包含以下三个关键环节:

  1. 心跳检测 (Heartbeat):主动探测连接是否"假死"
  2. 延迟重连 (Delay Retry):避免断开后立即重连造成的"惊群效应"
  3. 重连尝试限制:避免无限循环浪费资源

5. 即时通讯方案比较

技术 机制 优点 缺点
短轮询 (Polling) 客户端定时(如每 5s)发 HTTP 请求。 兼容性极好,实现简单。 大量无效请求,浪费带宽和 CPU。
长轮询 (Long Polling) 服务器收到请求后"挂起",有数据才返回。 比短轮询节省资源。 服务器连接依然被占用,体验有延迟。
SSE (Server-Sent Events) 基于 HTTP,服务器持续发送"流"数据。 实现简单,自动重连,支持轻量推。 单向(仅服务器到客户端),IE 不支持。
WebSocket 独立协议,全双工持久连接。 全双工,性能最优,延迟最低。 实现相对复杂,需考虑心跳检测。

5.1. 与SSE区别

SSE 是一种轻量级、易实现的实时通信方案,尤其适用于大模型流式输出(如 ChatGPT 的逐字生成)、实时通知等场景

特性 WebSocket SSE
通信方向 双向 (Full-Duplex) 单向 (Server to Client)
协议 自定义二进制协议 (ws://) 标准 HTTP (http://)
重连机制 需要手动写代码实现 浏览器内置自动重连
适用场景 游戏、实时聊天 ChatGPT 响应、监控大屏、通知推送
二进制数据 仅文本(可编码后传输) 原生支持二进制
连接复用 在 HTTP/2 及以上,多个 SSE 连接可完全复用同一个 TCP 连接(多路复用) 每个 WebSocket 连接都需要建立一个独立的 TCP 连接,无法跨域复用

5.2. 与HTTP 区别

特性 HTTP (1.1/2) WebSocket
通信方式 单向(半双工) 双向(全双工)
发起方 只能由客户端发起请求 双方均可主动发送数据
连接状态 无状态(每次请求需带 Header) 有状态(建立后连接一直保持)
开销 大(每次请求都有冗长 Header) 极小(建立后头部仅 2~10 字节)
实时性 低(依赖轮询频率) 极高(服务器实时推送)
URL 协议头 http:// 或 https:// ws:// 或 wss://
相关推荐
funnycoffee12317 分钟前
华为USG防火墙端口有收光,无法UP故障
服务器·网络·华为
宠友信息25 分钟前
消息撤回与已读状态如何在即时通讯源码中统一管理
java·spring boot·websocket·mysql·uni-app
泰和英杰1 小时前
2026 华为数字能源 + 机房工程实操标准:故障排查、机房建设、设备选型标准化技术方案
运维·服务器·网络
mounter6251 小时前
探索未来 AI 算力网络的基石:从传统 RoCE 走向 SRv6 驱动的弹性弹性网络(解析 Netdev 0x1A 创新实践)
linux·网络·人工智能·linux kernel·kernel·rdma·rocev2
x_x-F1 小时前
深入浅出 Linux 网络核心:sk_buff 的内存与指针流转
linux·运维·网络
CHANG_THE_WORLD14 小时前
TCP 三次握手彻底解析:SYN、ACK、SEQ、确认号与状态迁移
网络·网络协议·tcp/ip
2501_9151063214 小时前
TraceEagle 代理抓包教程 本机和手机的 HTTPS 抓包方法
网络协议·计算机网络·网络安全·ios·adb·https·udp
小心我捶你啊15 小时前
数据采集和Web解锁不是一回事,从用途到规则区分
前端·爬虫·网络协议
DLYSB_15 小时前
基于 HTTP API 与 Modbus 协议的多源监控声光语音联动告警系统设计与实现
网络·网络协议·http·报警灯
Bobolink_16 小时前
手机端和电脑端的网络环境配置有什么不同?
网络·智能手机·电脑·网络环境