讲师中心 微信公众号
AI工具推荐 视频效率加速

WebSocket前端开发新手教程 WebSocket从入门到精通全记录【指南】

夏涛同学_8556

夏涛同学_8556

发布时间:2026-05-31 07:52:19

|

246人浏览过

|

来源于php中文网

原创

WebSocket连接失败主因是协议、地址或服务端配置未对齐:ws/wss必须与服务端严格一致;Nginx需显式配置Upgrade头;域名访问时服务端须允许对应Origin;HTTP页面不可连wss,反之亦然;Network面板查状态码,非101则服务端未正确处理Upgrade请求。

websocket前端开发新手教程 websocket从入门到精通全记录【指南】

WebSocket 对象在现代浏览器中开箱即用,不需要引入额外库就能建立双向连接——但直接 new 一个 WebSocket 实例只是起点,真正落地时卡在连接失败、消息收不到、自动断连、跨域报错的开发者远比想象中多。


为什么 new WebSocket('ws://...') 总是触发 onerror 或直接报 failed?

绝大多数“连不上”的问题,根源不在前端代码,而在协议、地址或服务端配置没对齐:

  • ws:// 和 wss:// 必须和服务端实际暴露的协议严格一致;本地开发用 ws://localhost:3000,生产环境必须换 wss://api.example.com,混用必失败
  • 浏览器控制台 Network 标签页里点开 WS 连接,看 Status 是否为 101 Switching Protocols;如果是 400 或 404,说明服务端压根没识别 Upgrade 请求,常见于 Nginx 没配 proxy_set_header Upgrade $http_upgrade
  • 若用域名访问但服务端监听的是 127.0.0.1 或 0.0.0.0,部分服务(如某些 Node.js 的 ws 实例)默认会拒绝非 localhost 的 Origin,需显式设置 origin: '*' 或校验逻辑
  • Chrome 120+ 默认阻止不安全上下文(http:// 页面)创建 wss:// 连接,反之亦然;确保页面协议与 WebSocket 协议匹配

onmessage 收不到数据?检查 event.data 类型和编码

WebSocket 传输的数据默认是 DOMString(即 UTF-8 文本),但服务端可能发来 Blob 或 ArrayBuffer,而前端没做类型判断就直接 console.log(event.data),结果看到空值或 [object Blob] —— 这不是丢包,是解析错了。

  • 服务端发 JSON 字符串时,前端应写 JSON.parse(event.data);若服务端发二进制帧(比如 protobuf),event.data 就是 ArrayBuffer,需用 new Uint8Array(event.data) 处理
  • 避免在 onmessage 里直接操作 DOM;大量消息涌入时容易阻塞渲染,建议用 requestIdleCallback 或节流后更新 UI
  • 有些后端框架(如 Spring WebSocket)默认启用 STOMP 子协议,此时你收到的不是裸字符串,而是带 headers 和 body 的 STOMP 帧,必须用对应客户端(如 @stomp/stompjs)解析,不能直接监听 onmessage

如何让 WebSocket 在页面刷新/网络抖动后自动重连?

浏览器不会帮你重连:close 事件触发后,WebSocket 实例就不可用了,必须手动 new 新实例。简单轮询重试容易雪崩,得加退避和状态守卫。

根据ui图生成前端页面
根据ui图生成前端页面

将一个或多个 UI 原型图、线框图、产品截图或设计稿转换为标准化、可直接交付的 PRD 风格文档,供产品、设计、前端和测试共同使用。适用于 Codex 需要分析 PC 网页、桌面端、移动端、响应式页面、独立弹窗、表单、表格、看板、数据大屏或多页面流程截图,还原页面结构与交互,强制套用固定文档模板,抽取跨页面共享规则,或把一组原型沉淀为单页规范文档加整体业务流程文档的场景。不适用于纯视觉审美点评、代码实现、接口设计、埋点方案、竞品分析或无 UI 输入的业务需求创作。

下载

立即学习“前端免费学习笔记(深入)”;

  • 用 socket.readyState 判断当前状态:0(CONNECTING)、1(OPEN)、2(CLOSING)、3(CLOSED);只在 3 时才允许发起下一次重连
  • 重连间隔建议从 1s 开始,每次失败翻倍(1s → 2s → 4s → 8s),上限设为 30s,避免密集请求打垮服务端
  • 记录重连次数,超过 5 次后暂停自动重连,提示用户“网络异常,请手动刷新”,防止无限循环
  • 别在 onclose 里直接 new 实例——如果服务端瞬间崩溃又恢复,可能触发竞态;推荐用 setTimeout + 标志位控制

用 fetch 或 axios 发送 WebSocket 消息?不行,别混淆协议

fetch、axios、XMLHttpRequest 全部基于 HTTP,而 WebSocket 是独立协议,二者底层 TCP 连接、帧格式、状态管理完全不同。试图用 HTTP 工具“发送 WebSocket 消息”,就像用邮局寄快递单去指挥一辆正在高速行驶的卡车——根本不在一个通信平面。

  • 所有发往 WebSocket 服务端的消息,必须走 socket.send();参数支持 string、Blob、ArrayBuffer、TypedArray
  • 如果后端同时提供 HTTP 接口和 WebSocket 接口(比如登录用 POST /login,消息用 WS),注意:HTTP 登录成功后拿到的 token,通常要作为 query 参数传给 WebSocket URL(如 wss://api.example.com?token=xxx),而不是放在 Authorization header 里——WS 握手阶段不传递自定义 header
  • 调试时别依赖 curl 测试 WebSocket;要用 wscat -c wss://... 或浏览器 DevTools 的 WS 面板,否则看不到真实帧结构

真正的难点从来不在“怎么连上”,而在于连上之后怎么扛住断连、乱序、粘包、协议升级、子协议兼容、心跳保活这些细节。很多项目线上出问题,都是因为把 WebSocket 当成“高级 Ajax”来用,忽略了它是一条需要自己维护的、有状态的、长生命周期的通信管道。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2663

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

5783

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6770

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

6478

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

923

2024.05.22

C语言变量命名
C语言变量命名

c语言变量名规则是:1、变量名以英文字母开头;2、变量名中的字母是区分大小写的;3、变量名不能是关键字;4、变量名中不能包含空格、标点符号和类型说明符。php中文网还提供c语言变量的相关下载、相关课程等内容,供大家免费下载使用。

3429

2023.06.20

c语言入门自学零基础
c语言入门自学零基础

C语言是当代人学习及生活中的必备基础知识,应用十分广泛,本专题为大家c语言入门自学零基础的相关文章,以及相关课程,感兴趣的朋友千万不要错过了。

2388

2023.07.25

c语言运算符的优先级顺序
c语言运算符的优先级顺序

c语言运算符的优先级顺序是括号运算符 > 一元运算符 > 算术运算符 > 移位运算符 > 关系运算符 > 位运算符 > 逻辑运算符 > 赋值运算符 > 逗号运算符。本专题为大家提供c语言运算符相关的各种文章、以及下载和课程。

1320

2023.08.02

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn