当前位置: 首页 > article >正文

WHAT - 学习 WebSocket 实时 Web 开发

文章目录

  • 一、基础知识了解
    • 1. WebSocket 是什么?
    • 2. 它的优势:
  • 二、基本工作流程
  • 三、快速体验:使用原生 WebSocket
    • 客户端(浏览器端 JS):
    • 服务端(Node.js 示例,使用 ws 库)
  • 四、深入学习建议
  • 五、常见问题
  • 六、进阶推荐
  • 七、学习资料推荐

学习 WebSocket 是掌握实时 Web 开发的重要一步。下面是一个从 0 到 1 学习 WebSocket 的路线图,帮助你系统性入门:


一、基础知识了解

1. WebSocket 是什么?

  • WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。
  • 相比 HTTP,WebSocket 不需要反复建立连接,适合实时性强的场景,比如:聊天室、在线游戏、实时通知等。

2. 它的优势:

  • 持久连接(只建立一次 TCP 连接)
  • 双向通信(服务器可以主动推送消息)
  • 低延迟、低开销

二、基本工作流程

  1. 客户端发起连接请求
    浏览器发起 WebSocket 握手请求。
  2. 服务器响应
    如果服务器支持,会返回 101 状态码,表示协议切换成功。
  3. 双向通信开始
    双方可以互发消息。
  4. 关闭连接
    一方发起关闭,另一方确认,连接结束。

三、快速体验:使用原生 WebSocket

客户端(浏览器端 JS):

const socket = new WebSocket('ws://localhost:3000');socket.onopen = () => {console.log('连接已建立');socket.send('你好,服务器');
};socket.onmessage = (event) => {console.log('收到消息:', event.data);
};socket.onclose = () => {console.log('连接已关闭');
};socket.onerror = (error) => {console.error('发生错误:', error);
};

服务端(Node.js 示例,使用 ws 库)

npm install ws
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 3000 });wss.on('connection', (ws) => {console.log('客户端已连接');ws.on('message', (message) => {console.log('收到消息:', message);ws.send(`你说的是:${message}`);});ws.on('close', () => {console.log('客户端已断开');});
});

四、深入学习建议

内容学习重点
WebSocket 协议握手过程、协议头、状态码
安全性wss:// 加密连接,身份验证、心跳保活机制
高级应用聊天系统、实时协作、在线游戏
与 HTTP 的关系了解 HTTP 和 WebSocket 如何配合使用
框架集成使用 Socket.IO(封装更高级功能)或在 React/Vue 中使用 WebSocket hooks

五、常见问题

  • 如何做断线重连?
  • 如何心跳保活?
  • 如何做消息可靠传输?
  • 如何做多用户/房间管理?

六、进阶推荐

  • Socket.IO(Node.js):封装了 WebSocket 和长轮询,使用简单功能强大。
  • NestJS + WebSocket Gateway:适合在企业级 Node 应用中集成。
  • 前端封装 WebSocket hook:如 useWebSocket Hook 在 React 项目中使用。

七、学习资料推荐

  1. MDN WebSocket 文档
  2. ws 官方文档
  3. Socket.IO 官网
  4. B站搜索:WebSocket 实时聊天室项目
http://www.lryc.cn/news/2392390.html

相关文章:

  • 5G NTN卫星通信发展现状(截止2025年3月)
  • 【计算机网络】第2章:应用层—DNS
  • [Linux]虚拟地址到物理地址的转化
  • Linux线程入门
  • Kubernetes超详细教程,一篇文章帮助你从零开始学习k8s,从入门到实战
  • Docker基础 -- Ubuntu 22.04 AArch64 交叉编译 Docker 镜像构建指南
  • 【Elasticsearch】使用脚本删除索引中的某个字段
  • OpenHarmony平台驱动使用(二),CLOCK
  • 我们是如何为 ES|QL 重建自动补全功能的
  • Keepalived 配置 VIP 的核心步骤
  • 如何使用 Redis 快速实现排行榜?
  • MATLAB在逐渐被Python淘汰吗
  • Git 使用规范
  • 代码随想录第43天:图论4(最小生成树、拓扑排序)
  • AI智能体|扣子(Coze)搭建【自动生成超高质量PPT】工作流
  • list.sort(*, key=None, reverse=False)的两个问题
  • 文档处理的相关工具
  • java基础(面向对象进阶高级)内部类
  • 使用Python,OpenCV,Tesseract-OCR对自己的运动数据图片进行识别及分析,并使用Matplotlib绘制配速图出来
  • 小白的进阶之路系列之七----人工智能从初步到精通pytorch自动微分优化以及载入和保存模型
  • 创建型模式之 Builder (生成器)
  • 智能物资出入库管控系统
  • 鸿蒙OSUniApp 制作倒计时与提醒功能#三方框架 #Uniapp
  • 深入剖析网络协议:七层协议与四层协议详解
  • 机器学习-线性回归基础
  • 自学嵌入式 day 25 - 系统编程 标准io 缓冲区 文件io
  • [Vue组件]半环进度显示器
  • 科技赋能建筑行业,智能楼宇自控系统崭露头角成发展新势力
  • Rust入门之并发编程基础(一)
  • 高级特性实战:死信队列、延迟队列与优先级队列(二)