WebSocket 入门:是什么、有什么用、脚本能帮你做什么
介绍 WebSocket 是什么、和 HTTP 轮询的区别,以及用脚本做实时收发、压测、自动化监听的常见用法。
一、WebSocket 是什么
WebSocket 是一种在单个 TCP 连接上进行全双工 通信的协议。浏览器或脚本先通过一次 HTTP 请求「升级」到 WebSocket,之后双方可以随时互相发数据,无需再发新的 HTTP 请求。
和传统 HTTP 请求-响应 的对比:
- HTTP:客户端发请求 → 服务端响应 → 结束;要拿新数据就得再发一次请求(轮询)。
- WebSocket :建立连接后,服务端可以主动推,客户端也可以随时发;一条长连接,低延迟、省请求头。
所以 WebSocket 适合服务端要主动推送、或需要频繁双向通信的场景,例如实时通知、聊天、协作编辑、行情推送等。
二、有什么用:典型场景
- 实时推送:消息通知、订单状态、告警,服务端有变化就推给前端,无需前端轮询。
- 即时通讯 / 聊天:多端双向收发,一条连接即可。
- 实时协作:多人编辑、光标位置同步,用 WebSocket 广播各端状态。
- 实时数据大屏 / 监控:服务器指标、日志流、设备状态,持续推送到前端展示。
- 在线游戏 / 互动:低延迟的指令与状态同步。
这些场景若用 HTTP 轮询,要么延迟大,要么请求多、浪费带宽;用 WebSocket 一条长连接即可。
三、程序员的脚本能拿 WebSocket 做什么
用脚本(Node、Python、浏览器控制台等)连上 WebSocket 服务,可以自动化很多「实时」相关的事情。
3.1 自动化收发与断言
- 测试:脚本作为客户端连接你的 WebSocket 服务,按协议发送约定消息,校验服务端返回或推送内容,做接口测试、回归测试。
- 模拟用户:模拟多端同时在线(多连接)、发消息、收消息,验证业务逻辑或压测。
3.2 压测与限流验证
- 用脚本大量建连、并发收发,观察服务端 QPS、连接数、内存等,做简单的压力测试。
- 验证服务端的限流、踢人、重连策略是否按预期工作。
3.3 监听与数据采集
- 有些公开或内部服务通过 WebSocket 推送数据(如行情、日志、事件流),脚本连上后持续收消息,解析后落库、告警或做分析。
- 配合定时任务或守护进程,实现「7×24 监听 + 落库/转发」。
3.4 与浏览器 / 现有前端协同
- 在浏览器控制台 里用
new WebSocket(url)连上后端,手动发几条消息排查协议或数据格式。 - 用 Node 写小工具:收 WebSocket 推送 → 转存文件、发钉钉/邮件、触发本地命令等,把「实时事件」接到你自己的脚本流水线里。
四、最小示例:浏览器 + Node 服务端
4.1 服务端(Node + ws)
bash
pnpm add ws
javascript
const { WebSocketServer } = require('ws');
const wss = new WebSocketServer({ port: 8080 });
wss.on('connection', (ws) => {
ws.on('message', (data) => {
console.log('收到:', data.toString());
ws.send('服务端回显: ' + data.toString());
});
});
4.2 客户端(浏览器或 Node 脚本)
javascript
const ws = new WebSocket('ws://localhost:8080');
ws.onopen = () => ws.send('hello');
ws.onmessage = (e) => console.log('收到:', e.data);
浏览器里打开控制台,把上述客户端代码贴进去(或写成 HTML 里 script),即可和本机 Node 服务互通。脚本里同理,用 ws 库在 Node 里连 WebSocket,即可做上面的自动化、压测、监听等。
五、注意点与参考
- 断线重连 :网络抖动或服务重启会断连,脚本里建议做重连 + 退避,避免无限重试打爆服务端。
- 协议与格式 :WebSocket 只负责传输字节,业务层要自己约定消息格式(如 JSON、二进制),并处理粘包/分包(若用帧协议)。
- 安全 :生产环境用 wss://(TLS),并校验 Origin、做鉴权,避免被滥用。
参考:
小结:WebSocket 适合「服务端主动推、双向实时通信」;用脚本可以做自动化测试、压测、监听推送、数据采集和与前端/服务联调。觉得有用欢迎点赞、收藏。