news 2026/5/14 21:44:42

WebSocket介绍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 实时通信的事实标准,广泛用于需要低延迟、高频率交互的应用中。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 22:36:27

快速上手YOLO11,5步完成模型训练

快速上手YOLO11,5步完成模型训练 1. 背景与目标 随着计算机视觉技术的快速发展,实时目标检测在自动驾驶、安防监控、工业质检等场景中扮演着越来越重要的角色。YOLO(You Only Look Once)系列作为单阶段目标检测算法的代表&#…

作者头像 李华
网站建设 2026/5/11 17:56:27

PaddleOCR:全面解析百度开源的OCR王者

目录 一、概述 1.1 什么是PaddleOCR? 1.2 核心优势 二、架构设计 2.1 三大核心模块 2.2 文本检测模型 2.3 文本识别模型 2.4 方向分类器 三、核心技术特性 3.1 PP-OCR系列 3.1.1 PP-OCRv1/v2/v3演进 3.1.2 PP-OCRv4最新特性(2024)…

作者头像 李华
网站建设 2026/5/13 23:13:24

python基于微信小程序厦门周边游平台

目录项目背景技术架构核心功能创新点应用价值开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!项目背景 随着旅游业的快速发展和移动互联网的普及,微信小程序因其轻量化、便捷性成…

作者头像 李华
网站建设 2026/5/5 8:35:38

vue3+python校园排球俱乐部信息管理系统

目录校园排球俱乐部信息管理系统摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!校园排球俱乐部信息管理系统摘要 该系统基于Vue3前端框架与Python后端技术开发,旨在为校园排…

作者头像 李华
网站建设 2026/5/9 9:10:51

java-SSM359的医院病历管理系统-springboot

目录具体实现截图医院病历管理系统摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 医院病历管理系统摘要 该系统基于Java-SSM359框架与SpringBoot技术构建,旨在实现医院病历的数…

作者头像 李华
网站建设 2026/5/11 22:09:22

java-SSM361的雅博书城图书销售评价系统-springboot

目录具体实现截图雅博书城图书销售评价系统(基于SpringBoot)摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 雅博书城图书销售评价系统(基于SpringBoot&am…

作者头像 李华