WebSocketPatterns WebSocketPatterns

WebSocket模式是用于在网络应用中实现高级实时双向通信的一系列技术。它包括WebSocket基础、与HTTP轮询和SSE的比较、连接生命周期管理、心跳机制、消息队列确认、重连策略、速率限制等关键概念和实践。

后端开发 0 次安装 0 次浏览 更新于 3/5/2026

WebSocket Patterns

概览

WebSocket 是一种通信协议,提供了全双工通信通道,通过单个 TCP 连接实现。它使得客户端和服务器之间能够进行实时、事件驱动的通信,非常适合需要即时更新的应用,如聊天应用、实时仪表板和协作工具。

前提条件

  • 理解 HTTP 协议和 REST APIs
  • 了解 JavaScript/Node.js 或等效的后端语言
  • 基本了解 TCP/IP 网络
  • 熟悉异步编程模式

关键概念

WebSocket 基础

WebSocket 是一种协议,它:

  • 提供持久的、全双工通信
  • 使用单个 TCP 连接
  • 在握手期间通过 HTTP/1.1 操作,然后升级
  • 与 HTTP 轮询相比开销较低
  • 支持文本和二进制数据

WebSocket 与 HTTP 轮询与 SSE 比较

特性 WebSocket HTTP 轮询 服务器发送事件 (SSE)
方向 双向 客户端 → 服务器 仅服务器 → 客户端
连接 持久 每个请求新建 持久
开销
浏览器支持 优秀 优秀 优秀
二进制数据 否(仅限文本)
重连 手动 不适用 浏览器处理
用例 交互式实时 简单更新 单向流

何时使用 WebSocket:

  • 实时聊天应用
  • 实时协作工具
  • 多人游戏
  • 实时仪表板
  • 股票交易平台

何时使用 HTTP 轮询:

  • 简单、不频繁的更新
  • 需要旧版浏览器支持
  • 低复杂性要求

何时使用 SSE:

  • 单向服务器到客户端更新
  • 新闻源,通知
  • 股票行情

连接生命周期

握手

WebSocket 连接始于一个 HTTP 升级请求:

GET /ws HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13

服务器响应:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

连接状态

const ws = new WebSocket('ws://example.com/ws');

// 0 = 连接中 - 连接尚未打开
console.log(ws.readyState === WebSocket.CONNECTING);

// 1 = 打开 - 连接已打开,准备就绪
ws.onopen = () => {
  console.log(ws.readyState === WebSocket.OPEN);
};

// 2 = 关闭中 - 连接正在关闭过程中
ws.onclose = () => {
  console.log(ws.readyState === WebSocket.CLOSING);
};

// 3 = 已关闭 - 连接已关闭
ws.onclose = () => {
  console.log(ws.readyState === WebSocket.CLOSED);
};

实施指南

基础 WebSocket 服务器 (Node.js)

…(此处省略中间代码和文本,保持原有格式不变)

安全考虑

WSS (WebSocket Secure)

…(此处省略中间代码和文本,保持原有格式不变)

测试

单元测试

…(此处省略中间代码和文本,保持原有格式不变)

监控和调试

日志记录

…(此处省略中间代码和文本,保持原有格式不变)

最佳实践

…(此处省略中间代码和文本,保持原有格式不变)

相关技能

…(此处省略中间代码和文本,保持原有格式不变)