WebSocket | 一点简单了解

文章目录

    • [什么是 WebSocket 协议?](#什么是 WebSocket 协议?)
    • [WebSocket 的工作原理?](#WebSocket 的工作原理?)
    • [WebSocket 与 HTTP 的区别?](#WebSocket 与 HTTP 的区别?)
    • [WebSocket 的典型应用场景?](#WebSocket 的典型应用场景?)
    • [WebSocket 为什么比轮询更高效?](#WebSocket 为什么比轮询更高效?)
    • [WebSocket 如何保持心跳?](#WebSocket 如何保持心跳?)
    • [WebSocket 如何处理断线重连?](#WebSocket 如何处理断线重连?)
    • [WebSocket 的安全性如何保障?](#WebSocket 的安全性如何保障?)

什么是 WebSocket 协议?

  • WebSocket 是一种在 单个 TCP 连接 上 进行 全双工通信 的协议。
  • HTTP 是 请求-响应模型(客户端主动,请求一次返回一次)。
  • WebSocket 是 持久化连接(连接建立后,客户端和服务端都可以随时互发消息)。

WebSocket 的工作原理?

  • WebSocket 是在 一个已建立的 TCP 连接上,通过一次 HTTP 升级握手把协议从 HTTP 切换成 WebSocket,从此客户端和服务器之间可以进行 双向、低延迟、持续的帧(frame)级别通信。
  1. 客户端与服务器建立 TCP 连接(三次握手,TCP 层,浏览器自动处理)。
  2. 客户端发起 HTTP 升级(Upgrade)握手,请求从 HTTP 切换到 WebSocket。
  3. 服务器校验请求并返回 101 Switching Protocols,握手完成,协议升级。
  4. 握手完成后,双方通过 WebSocket 帧(frame) 在同一 TCP 连接上往返发送消息(双向)。
  5. 任意一方可发送 Close 帧关闭连接。
  • WebSocket 连接的建立过程分为两个阶段:首先客户端和服务器通过 TCP 三次握手建立底层连接;然后客户端发起一个带有 Upgrade: websocket 的 HTTP 请求;服务端返回 101 Switching Protocols 响应后,协议正式从 HTTP 升级为 WebSocket。之后双方就在同一个 TCP 连接上进行全双工通信,无需再频繁建立连接。
go 复制代码
Client                          Server
<----- TCP three-way handshake ----------> (完成)
GET /chat  Upgrade: websocket  --------->  (HTTP 握手请求)
<----- 101 Switching Protocols ----------> (握手成功)
<--------------------------------------->  (WebSocket frames 双向通信)
Client 或 Server 发送 Close 帧 ---------->  (连接关闭)

WebSocket 与 HTTP 的区别?

WebSocket 的典型应用场景?

  1. 在线聊天、弹幕系统
  2. 股票 / 币价 实时推送
  3. 在线游戏状态同步
  4. 协同编辑(如多人文档编辑)
  5. 实时监控系统(如服务器状态、日志推送)

WebSocket 为什么比轮询更高效?

  • 轮询每次都建立 HTTP 请求,带大量请求头和握手开销。
  • WebSocket 连接只建立一次,之后实时推送。
  • 减少延迟和网络带宽消耗。

WebSocket 如何保持心跳?

  • 常见心跳机制:
    1. 客户端周期性发送 Ping 帧;
    2. 服务端响应 Pong 帧;
    3. 若超时未响应则断开重连。

WebSocket 如何处理断线重连?

  • 客户端检测到连接断开(或心跳超时);
  • 重新发起 WebSocket 连接;
  • 通常结合 指数退避算法 或 固定间隔重连。

WebSocket 的安全性如何保障?

  • 使用 wss://(基于 TLS 的 WebSocket);
  • 验证 token;
  • 控制消息大小、速率;
  • 设置连接超时。
相关推荐
0+1116 分钟前
Linux --应用层协议HTTP
网络·网络协议·http
紫神13 分钟前
DDS 通信技术说明
网络·云原生·容器·k8s·dds·弱网
洋不写bug27 分钟前
网络编程(二)TCP回显服务器与客户端通信详解
服务器·网络·tcp/ip·tcp·网络通信·javaee·回显服务器
K成长日志37 分钟前
BLE Host层L2CAP--数据包格式
网络·物联网·无线通信·蓝牙·iot·ble
liangshanbo121544 分钟前
主系统登录后,子系统怎么实现自动登录?
java·网络·数据库
谢亮_vipxieliang1 小时前
Go 并发安全性保障
服务器·网络·golang
袁章根2 小时前
基于瑞昱RTL8367S交换机电路设计(一)
网络·嵌入式硬件·硬件架构·硬件工程
洋不写bug2 小时前
网络原理(一)应用层协议、传输层UDP/TCP报文格式解析
网络·tcp/ip·udp·tcp·应用层·javaee·传输层
时间的拾荒人3 小时前
Qt 网络编程与音视频开发实战:从 UDP/TCP 到 HTTP 与多媒体
网络·qt·音视频
网络小江12 小时前
组网第十课:编码、速率与排障——从比特到信号的最后一公里
网络协议