WebSocket是一种基于单个TCP连接的全双工通信协议,支持浏览器与服务器持续连接并互相主动发消息,适用于聊天、实时通知等场景;其通过HTTP Upgrade握手建立长连接,区别于HTTP的请求-响应模式;前端使用new WebSocket()创建连接,监听open、message、close、error事件,并用send()发送数据;后端需配套WebSocket服务(如Node.js的ws库、Python的websockets等)来处理连接管理、广播与鉴权。

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它让浏览器和服务器之间可以**持续保持连接、互相主动发消息**,不像传统 HTTP 那样每次请求都要重新握手。这是实现实时通信(比如聊天、协作编辑、实时通知)最常用、最直接的方式。
WebSocket 和 HTTP 的关键区别
HTTP 是“请求-响应”模型:浏览器发一次请求,服务器回一次响应,连接就断了。想获取新数据?只能不断轮询(定时发请求),效率低、延迟高、浪费资源。
WebSocket 是“长连接”模型:客户端和服务器只在建立连接时走一次 HTTP 升级(Upgrade)握手,之后就切换到 WebSocket 协议,双方随时可发消息,没有请求/响应的束缚。
前端怎么用 JavaScript 创建 WebSocket 连接
浏览器原生支持 WebSocket 构造函数,使用非常简洁:
立即学习“Java免费学习笔记(深入)”;
- 用 new WebSocket(url) 初始化连接,url 必须是 ws:// 或加密的 wss://(类似 http/https)
- 监听 open 事件表示连接成功,可以开始发送消息
- 监听 message 事件接收服务器推送的数据
- 调用 send() 方法向服务端发字符串或 ArrayBuffer(注意:不支持直接发对象,需 JSON.stringify)
- 监听 close 或 error 做异常处理和重连逻辑(实际项目中建议加自动重连)
一个最小可用示例
假设后端 WebSocket 服务运行在 ws://localhost:8080:
const ws = new WebSocket('ws://localhost:8080');
ws.onopen = () => {
console.log('已连接');
ws.send(JSON.stringify({ type: 'login', user: 'Alice' }));
};
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log('收到消息:', data);
};
ws.onclose = () => console.log('连接已关闭');
ws.onerror = (err) => console.error('连接出错:', err);
后端不能少:需要配套的 WebSocket 服务
前端只是半边腿。WebSocket 要真正工作,必须有支持 WebSocket 协议的服务端,比如:
- Node.js 可用 ws 库(轻量、主流)或 Socket.IO(功能更全,自带降级兼容)
- Python 可用 websockets 或 FastAPI + websockets
- Java 可用 Spring WebFlux 或 Jetty 的 WebSocket 支持
服务端要处理连接管理、广播、鉴权、心跳保活等——这些前端不用管,但开发前得确认后端已准备好对应接口和路径。
基本上就这些。WebSocket 本身不复杂,但容易忽略连接状态管理、错误重试和消息序列化细节。先跑通连接和收发字符串,再逐步加业务逻辑,就很稳了。











