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

WebSocket介绍

文章目录

      • 一、背景与动机
      • 二、核心特点
      • 三、工作流程
      • 四、应用场景
      • 五、安全考虑
      • 六、编程示例(简要)
      • 七、与类似技术对比

WebSocket 是一种在单个 TCP 连接上进行全双工通信的网络协议,由 HTML5 规范引入,旨在解决传统 HTTP 协议在实时通信场景中的局限性。


一、背景与动机

传统的 Web 应用基于 HTTP/1.1,采用“请求-响应”模型:

  • 客户端(如浏览器)发起请求;
  • 服务器处理后返回响应;
  • 连接随即关闭。

这种模式不适合需要服务器主动推送数据低延迟双向通信的场景(如聊天应用、实时游戏、股票行情、协同编辑等)。为实现“伪实时”,早期常采用轮询(polling)或长轮询(long polling),但这些方法存在:

  • 高延迟;
  • 高开销(频繁建立连接、重复头部);
  • 服务器资源浪费。

WebSocket 正是为了解决这些问题而设计。


二、核心特点

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

  2. 持久连接
    一次握手建立连接后,连接保持打开,直到显式关闭。

  3. 低开销
    数据帧头部极小(2~14 字节),相比 HTTP 的冗余头部更高效。

  4. 基于 TCP
    可靠、有序、面向连接。

  5. 兼容 HTTP 端口
    默认使用ws://(80 端口)或wss://(443 端口,加密),便于穿越防火墙和代理。


三、工作流程

  1. 握手阶段(HTTP Upgrade)
    客户端通过 HTTP 发起升级请求:

    GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSocket-Version: 13

    服务器响应:

    HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

    握手成功后,底层 TCP 连接转为 WebSocket 协议。

  2. 数据传输阶段
    双方可通过 WebSocket 帧(frame)自由发送文本(UTF-8)或二进制数据。

  3. 关闭连接
    任一方可发送关闭帧(close frame),实现优雅关闭。


四、应用场景

  • 实时聊天/消息系统
  • 在线多人游戏
  • 实时仪表盘(监控、金融数据)
  • 协同文档编辑(如 Google Docs)
  • IoT 设备状态同步

五、安全考虑

  • 使用wss://(WebSocket Secure)防止中间人攻击;
  • 验证Origin头防止跨站 WebSocket 劫持(CSWSH);
  • 对用户身份进行认证(通常在握手前通过 Cookie 或 Token);
  • 限制连接数防 DoS。

六、编程示例(简要)

前端(JavaScript)

constws=newWebSocket('wss://example.com/socket');ws.onopen=()=>ws.send('Hello Server');ws.onmessage=(event)=>console.log('Received:',event.data);ws.onclose=()=>console.log('Connection closed');

后端(Python + websockets 库)

importasyncioimportwebsocketsasyncdefhandler(websocket,path):asyncformessageinwebsocket:awaitwebsocket.send(f"Echo:{message}")start_server=websockets.serve(handler,"localhost",8765)asyncio.get_event_loop().run_until_complete(start_server)asyncio.get_event_loop().run_forever()

七、与类似技术对比

技术双向通信持久连接开销浏览器支持
HTTP 轮询
长轮询半双工
Server-Sent Events (SSE)单向(服务器→客户端)✅(除 IE)
WebSocket极低✅(现代浏览器)

WebSocket 已成为现代 Web 实时通信的事实标准,广泛用于需要低延迟、高频率交互的应用中。

http://www.jsqmd.com/news/262157/

相关文章:

  • 亲测好用10个一键生成论文工具,研究生论文写作必备!
  • python基于微信小程序厦门周边游平台
  • 吐血推荐10个一键生成论文工具,本科生搞定毕业论文!
  • java-SSM377建材钢材销售管理系统前端vue-springboot
  • 【深度技术】OCR 已死?为何跨境电商必须拥抱“多模态大模型(VLM)”进行图片翻译?
  • vue3+AI算力资源网上商城系统的设计与实现
  • vue3+python中药材采购管理系统
  • java-SSM378的音乐网站-付费管理系统vue前端-springboot
  • 【Python图形学】AI 修图太假?揭秘如何用“光影追踪”算法让翻译后的文字完美落地
  • 实测Qwen3-Embedding-4B:企业知识库搭建真实体验分享
  • vue3+python人脸识别具有隐私保护的个人资产在线安全管理平台设计与实现
  • java-SSM379教师工作考核绩效管理评教系统vue-springboot
  • vue3+python农田多源数据智能采集与可视化系统设计
  • java-SSM381的在线课程购买学习系统vue-springboot
  • Gino同传带练第9天——继续练视译。人和人之间的差距往往就是,你周末节假日都在玩,人家在练;你一天刷8小时短视频,人家一天练15个小时。然后人家一天同传赚几大千的时候,你要说命运不公……
  • 深聊长沙实力强的泳池设计公司,博康温泉泳池设计靠谱吗 - 工业品牌热点
  • 说说源头导线管厂家,杭州天一实业穿线管靠谱吗,值得选吗? - 工业品牌热点
  • Label Studio 详解:一站式数据标注平台全面介绍
  • java-SSM358的校园大学生兼职系统vue-springboot
  • 打工人必备!5 款免费好用且简单上手的 AI PPT 工具推
  • PaddleOCR:全面解析百度开源的OCR王者
  • java-SSM359的医院病历管理系统-springboot
  • java-SSM360的学生宿舍 来访水电费前端vue-springboot
  • 面向开发者的中文情绪识别工具|StructBERT镜像集成Flask服务
  • YOLOv8:下一代实时目标检测的全面解析
  • 学习笔记——ARM Cortex-A 裸机开发实战指南
  • GESP认证C++编程真题解析 | 202406 七级
  • 完整教程:深科技 | 电子表决设备在政务会议中的功能定位与品牌分析
  • Docker Swarm 部署 Zookeeper 集群
  • 尝试逐步创建“辅助审阅”工具-手札