⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

JS WebSocket

学习WebSocket · 难度:高级 · +15XP

JavaScript WebSocket 实时通信详解

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,客户端和服务器之间可以保持长连接、实时双向传输数据,广泛用于聊天室、实时通知、在线游戏等场景。

WebSocket vs HTTP

特性HTTPWebSocket
通信方式请求-响应(单向)全双工(双向)
连接方式短连接或长轮询持久连接
协议标识http:// / https://ws:// / wss://
消息开销每次请求都带完整请求头仅需少量帧头信息
推送能力需要轮询模拟推送原生支持服务器推送

创建 WebSocket 连接

  1. 使用 new WebSocket(url) 构造函数
  2. 通过事件监听器处理连接生命周期
  3. 使用 send() 发送消息
  4. 使用 onmessage 接收消息
// 创建 WebSocket 连接(wss 表示加密连接)
const ws = new WebSocket("wss://echo.websocket.org");
// 连接打开时触发
ws.onopen = () => {
  console.log("连接已建立");
  ws.send("Hello Server!");
};
// 接收到消息时触发
ws.onmessage = (event) => {
  console.log("收到消息:", event.data);
};
// 连接关闭时触发
ws.onclose = (event) => {
  console.log("连接已关闭,代码:", event.code);
};
// 发生错误时触发
ws.onerror = (error) => {
  console.error("WebSocket 错误:", error);
};

WebSocket 状态管理

readyState含义
CONNECTING0正在连接中
OPEN1已连接,可通信
CLOSING2正在关闭中
CLOSED3已关闭
// 安全发送:只在连接打开时发送
function safeSend(ws, data) {
  if (ws.readyState === WebSocket.OPEN) {
    ws.send(JSON.stringify(data));
  } else {
    console.warn("WebSocket 未连接,发送失败");
  }
}
// 主动关闭连接
ws.close(1000, "客户端主动关闭"); // 1000 即正常关闭
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 231 篇
0 完成
🔥 0