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

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.lryc.cn/news/2392180.html

相关文章:

  • 秋招Day11 - JVM - 类加载机制
  • Webug4.0靶场通关笔记03- 第3关SQL注入之时间盲注(手注法+脚本法 两种方法)
  • PostgreSQL 数据完整性检查工具对比:amcheck 与 pg_checksums
  • Vert.x学习笔记-什么是Handler
  • 浏览器游戏的次世代革命:WebAssembly 3.0 实战指南
  • Java设计模式之工厂模式与策略模式简单案例学习
  • 【Echarts】象形图
  • git 本地合并怎么撤回
  • 集星云推短视频矩阵系统的定制化与私有化部署方案
  • npm run build 报错:Some chunks are larger than 500 KB after minification
  • XCTF-web-file_include
  • 5.28 后端面经
  • CPP中CAS std::chrono 信号量与Any类的手动实现
  • PHP生成pdf方法
  • 【Android笔记】记一次 CMake 构建 Filament Android 库的完整排错过程(安卓交叉编译、CMake、Ninja)
  • C#中的BeginInvoke和EndInvoke:异步编程的双剑客
  • 告别延迟!modbus tcp转profine网关助力改造电厂改造升级
  • 《软件工程》第 5 章 - 需求分析模型的表示
  • 解释k8s种ConfigMap和Secret的作用,如何在Pod中挂载环境变
  • 阿里云国际版香港轻量云服务器:CN2 GIA加持,征服海外网络的“速度与激情”!
  • Qt6无法识别OpenCV(Windows端开发)
  • 二、网络安全常见编码及算法-(2)
  • Windows系统安装MySQL Connector 使用C++ VS2022连接MySQL
  • D2000平台上Centos使用mmap函数遇到的陷阱
  • Elasticsearch索引机制与Lucene段合并策略深度解析
  • BPE、WordPiece 与 Unigram:三种主流子词分词算法对比
  • 青少年编程与数学 02-020 C#程序设计基础 11课题、可视化编程
  • AI时代新词-AI驱动的自动化(AI - Driven Automation)
  • 整合Jdk17+Spring Boot3.2+Elasticsearch9.0+mybatis3.5.12的简单用法
  • Starrocks 物化视图的实现以及在刷新期间能否读数据