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

WebSocket学习总结

WebSocket 是一种基于TCP的网络通信协议,允许浏览器和服务器之间进行全双工、实时、低延迟的双向数据传输。它突破了传统HTTP协议的限制(请求-响应模式),特别适合需要实时通信的场景(如聊天、实时数据推送、游戏等)。

核心特点

  1. 全双工通信
    客户端和服务器可以同时发送和接收数据,无需等待对方的响应。

  2. 持久连接
    连接建立后(通过HTTP握手),会保持打开状态,直到任意一方主动关闭,避免了频繁建立连接的开销。

  3. 低延迟
    由于连接复用和实时传输,相比轮询或长轮询(Long Polling),延迟显著降低。

  4. 二进制和文本数据支持
    可以传输文本(如JSON)和二进制数据(如图片、视频)。

  5. 跨域支持
    原生支持跨域通信,无需额外配置(如CORS)。

工作原理

  1. 握手阶段(HTTP升级)
    客户端通过HTTP请求发送升级协议头,服务器确认后,连接从HTTP升级为WebSocket:

    // 客户端请求
    GET /chat HTTP/1.1
    Host: example.com
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
    Sec-WebSocket-Protocol: chat
    Sec-WebSocket-Version: 13// 服务器响应
    HTTP/1.1 101 Switching Protocols
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
    Sec-WebSocket-Protocol: chat
    
  2. 数据传输阶段
    握手成功后,连接转为TCP通道,双方通过**帧(Frame)**格式交换数据,无需HTTP头部,开销极小。

  3. 连接关闭
    任意一方发送关闭帧(Close Frame)终止连接。

与HTTP的对比

特性HTTPWebSocket
通信模式请求-响应(半双工)全双工
连接状态短连接(每次请求新建)持久连接
实时性低(需轮询)高(实时推送)
协议开销高(每次请求带头部)低(仅握手时用HTTP)
典型场景静态资源、API调用聊天、实时数据更新

应用场景

  1. 实时通信

    • 即时聊天(如微信、QQ)、在线客服。
    • 多人协作工具(如Google Docs的实时编辑)。
  2. 数据推送

    • 股票行情、体育赛事比分、天气预报更新。
    • 消息通知(如邮件、社交平台提醒)。
  3. 游戏与直播

    • 实时多人游戏(如在线棋牌)。
    • 音视频直播弹幕、互动功能。
  4. 物联网(IoT)

    • 设备状态监控、远程控制(如智能家居)。

实现方式

客户端(浏览器)

使用JavaScript的WebSocket API:

// 建立连接
const ws = new WebSocket('ws://example.com/socket');// 连接打开时触发
ws.onopen = () => {ws.send('Hello, server!');
};// 收到消息时触发
ws.onmessage = (event) => {console.log('Received:', event.data);
};// 连接关闭时触发
ws.onclose = () => {console.log('Connection closed');
};
服务端

常见的服务器端实现:

  • Node.js:使用wssocket.iouWebSockets.js库。
  • Java:使用Spring WebSocket、Jetty或Tomcat内置支持。
  • Python:使用websocketsTornadoDjango Channels
  • Go:使用标准库net/http中的WebSocket支持。

注意事项

  1. 兼容性
    现代浏览器(IE 10+、Chrome、Firefox等)均支持,但需注意旧版浏览器的兼容性。

  2. 代理与防火墙
    部分企业防火墙可能限制WebSocket连接,需配置允许ws://wss://(TLS加密)协议。

  3. 心跳机制
    为避免连接被中间设备断开,需实现心跳包(Ping/Pong帧)。

  4. 安全性
    生产环境应使用wss://(WebSocket over TLS)加密传输,防止数据被窃听。

总结

WebSocket是现代Web应用中实现实时通信的首选技术,它通过持久连接和全双工通信,解决了HTTP协议在实时性方面的局限,广泛应用于需要即时数据交互的场景。

http://www.xdnf.cn/news/9345.html

相关文章:

  • Python Day34 学习
  • 深度学习能取代机器学习吗?
  • 庄家抬轿指标,通达信炒股软件副图指标公式,指标使用图文教程
  • Linux Ubuntu24.04配置安装MySQL8.4.5高可用集群主从复制!
  • AI 编程如何让你轻松采集网站数据?
  • GitHub 趋势日报 (2025年05月26日)
  • 体现物联网环境下安全防护的紧迫性 :物联网环境下的个人信息安全:隐忧与防护之道
  • 【Spring AI】Spring AI 1.0.0-M7、M8更新至1.0.0版本兼容的所需修改要点
  • 【ARM】如何通过ARMDS的Map文件查看堆栈调用情况
  • 【MAP容器姓名成绩输入查询修改删除】2022-2-4
  • 5 WPF中的Page页面的使用
  • 2.3 TypeScript 非空断言操作符(后缀 !)详解
  • C++中回调函数详解
  • javaEE1
  • 【JavaEE】-- 文件操作和IO
  • FART 自动化脱壳框架一些 bug 修复记录
  • Python学习(1) ----- Python的文件读取和写入
  • 芝麻糊SSVIP2.0.5.7 | 自动收取能量 小游戏任务
  • CSS 中的transform详解
  • OptiStruct结构分析与工程应用:NVH外声场分析
  • AStar低代码平台-脚本调用C#方法
  • 【MySQL】2-MySQL索引P2-执行计划
  • 2025蓝桥杯WP
  • C++学习-入门到精通【9】面向对象编程:继承
  • 青少年编程与数学 02-020 C#程序设计基础 06课题、运算符和表达式
  • 内容中台的AI驱动是什么?
  • Linux--CentOs 8配置及基础命令
  • atomic.Value与sync.map有什么区?
  • 建筑兔零基础Arduino自学记录100|简易折纸机器人-17
  • C语言中清空缓存区到底写到哪里比较好