讲师中心 微信公众号
AI工具推荐 视频效率加速

WebSocket 发送大数据量时的分包与重组逻辑

梦伟吖_7047

梦伟吖_7047

发布时间:2026-07-06 09:39:20

|

945人浏览过

|

来源于php中文网

原创

WebSocket大数据传输中,协议自动分片透明但不可控,仅解决帧大小限制;应用层手动分块才是实现断点续传、校验、幂等上传等业务需求的可靠方案。

websocket 发送大数据量时的分包与重组逻辑

WebSocket 发送大数据量时,分包与重组不是开发者必须手动干预的流程,而是协议内建机制与浏览器/服务端实现共同作用的结果。关键在于分清“协议原生分片”和“应用层分块”两种不同逻辑——前者由底层自动完成但不可控,后者需你主动设计才能支撑断点续传、校验、流控等真实业务需求。

浏览器自动分片:透明但有边界

当你调用 ws.send(arrayBuffer) 发送一个较大二进制数据(例如 20MB 文件),现代浏览器(Chrome/Firefox/Edge)通常会按内部策略将其拆成多个 WebSocket 帧:

  • 首帧:FIN = 0,opcode = 2(二进制帧)
  • 中间帧:FIN = 0,opcode = 0(continuation)
  • 末帧:FIN = 1,opcode = 0(continuation)
  • 整个过程对 JavaScript 层完全透明;接收端仍通过单个 message 事件收到完整 ArrayBuffer
  • 触发分片没有统一阈值,常见在几 MB 到几十 MB 区间,取决于浏览器实现和内存压力
  • 若服务端未严格遵循 RFC 6455 解析 FIN 和 opcode=0 帧,可能出现数据截断或解析失败

手动分块上传:断点续传与可靠性的基础

真正支持断线重连、进度追踪、校验恢复的,是前端在 JS 层把文件切片、编号、带元数据发送,服务端按序存盘并显式确认完成:

WebSocket 8.18.2
WebSocket 8.18.2

WebSocket 8.18.2 是该协议规范的一个重要迭代版本,主要优化了连接稳定性与数据传输效率。它通过全双工通信机制,允许客户端与服务器在单一长连接上实时交换数据,大幅降低传统 HTTP 轮询的开销。该版本增强了心跳保活、自动重连及二进制帧传输能力,适用于即时通讯、在线游戏及金融行情推送等低延迟场景,为开发者提供更可靠的实时网络交互基础。

下载
  • 使用 Blob.slice(start, end) 或 File.slice() 切出固定大小块(如 1MB)
  • 每块封装为 JSON 对象发送:{ fileId: "abc", chunkIndex: 5, totalChunks: 12, data: arrayBuffer, hash: "sha256..." }
  • 前端用 localStorage 或 IndexedDB 持久记录已成功上传的 chunkIndex 或字节偏移量
  • 重连后先发查询请求(如 {"type":"query","fileId":"abc"}),服务端返回已收块列表,前端跳过继续发送
  • 最后一块发送后,额外发一条文本帧 {"type":"complete","fileId":"abc"} 作为完成信号

服务端重组的关键实践

服务端不能依赖连接是否关闭来判断上传完成,必须基于应用层协议做状态管理:

  • 每个分块写入磁盘临时路径:/tmp/uploads/{fileId}/{chunkIndex},避免内存堆积
  • 收到每块后比对前端传来的 hash 字段,不一致则返回错误,拒绝写入
  • 收到 "complete" 指令后,按 chunkIndex 排序读取所有临时块,用流式方式(如 fs.createWriteStream)合并为目标文件
  • 连接异常断开时,检查该 fileId 是否已标记完成;未完成则清理对应临时目录
  • 所有操作需幂等:同一 fileId + chunkIndex 的重复上传应被识别并忽略

为什么不推荐依赖自动分片做关键传输?

协议级分片解决的是“单消息太大导致帧超限”的问题,但它不具备业务所需的可靠性语义:

  • 不记录发送进度,断线即从头开始
  • 不提供重传机制,任意一帧丢失整条消息失效
  • 不保证消息送达顺序,多路并发发送时帧可能乱序(尽管协议要求按序重组,但丢帧后无法补)
  • 无法做逐块校验、压缩、加密或权限控制
  • 浏览器之间分片策略不一致,跨平台行为难保障

热门AI工具

更多
讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2303

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

4983

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6070

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

5578

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

783

2024.05.22

大数据分析工具有哪四个
大数据分析工具有哪四个

大数据分析的四个工具分别是rapidminer、Hpcc、Hadoop和Pentaho bi。大数据分析用于从各种来源生成的原始数据中提取有价值的数据。这些数据帮助我们获得有意义的见解、隐藏的模式、未知的相关性、市场趋势等等,具体取决于行业。大数据分析的主要动机是提供有价值的见解,以便为未来做出更好的决策。php中文网为大家带来了大数据分析的相关教程、以及相关文章等内容,供大家免费下载使用。

4656

2023.06.21

Java 大数据处理基础(Hadoop 方向)
Java 大数据处理基础(Hadoop 方向)

本专题聚焦 Java 在大数据离线处理场景中的核心应用,系统讲解 Hadoop 生态的基本原理、HDFS 文件系统操作、MapReduce 编程模型、作业优化策略以及常见数据处理流程。通过实际示例(如日志分析、批处理任务),帮助学习者掌握使用 Java 构建高效大数据处理程序的完整方法。

1229

2025.12.08

大数据专业学习教程
大数据专业学习教程

本专题整合了大数据专业学习相关教程,阅读专题下面的文章了解更多详细内容。

223

2026.01.05

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

100

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebSocket手册
WebSocket手册

共0课时 | 0人学习

Webman中文手册
Webman中文手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn