WebSocket 入门:从轮询到实时推送

举报
yd_270424476 发表于 2026/11/07 23:07:42 2026/11/07
【摘要】 HTTP 是一问一答,想让服务器主动推消息就得靠 WebSocket。本文用 30 行代码讲清 WebSocket 握手、心跳和重连的最小实现。

HTTP 是「一问一答」的模型,浏览器不问,服务器不答。聊天室、行情推送、协同编辑这类需要服务器主动推消息的场景,靠不停轮询既浪费带宽又有延迟——WebSocket 就是为此而生的全双工通道。

一、握手是怎么回事

WebSocket 复用 HTTP 完成握手:客户端发一个带 Upgrade: websocket 头的 GET 请求,服务器返回 101 Switching Protocols,之后这条 TCP 连接就脱离了 HTTP 语义,双方可以随时互发帧。握手成功后协议切换为 ws://(加密为 wss://),URL 写法与 http 相同。

二、浏览器端最小实现

const ws = new WebSocket('wss://echo.example/ws'); onopen 时发消息,onmessage 收消息,onclose 里做重连。重点提示:直接 new 出来的连接没有自动重连,生产环境必须自己包一层——记录重连次数、指数退避、页面可见时立即恢复,这三点是稳定性的关键。

三、心跳与保活

中间的 Nginx、负载均衡默认 60 秒就掐掉空闲连接,所以客户端每 30 秒发一个 ping 帧(协议层 ping/pong 不占业务消息),服务器超时未收到 pong 就判定掉线。漏做心跳的 WebSocket 在生产上「莫名断连」几乎都是这个原因。

四、与 SSE 怎么选

只需要服务器到浏览器的单向推送(如公告、通知栏),用 SSE 更简单:纯 HTTP、自动重连、浏览器原生支持;需要双向交互(聊天、协作、联机对战)才上 WebSocket。按需选型,别为了技术栈上 WebSocket。

小结:握手靠 HTTP Upgrade,保活靠心跳,稳定性靠重连策略。掌握这三件事,WebSocket 就能从「会跑 demo」进阶到「敢上生产」。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。