Files
quick-share/docs/05-文本传输(含大文本分片).md

1.6 KiB
Raw Permalink Blame History

05 - 文本传输(含大文本分片)

功能目标

  • 支持在房间内发送/接收文本消息。
  • 支持大文本自动分片(避免单包过大导致失败或卡顿)。

前端Vue

  • 输入与发送
    • MessageInput.vue:输入框 + 发送按钮;支持 Ctrl+V 粘贴填充。
    • 发送前校验:非空、长度上限(建议)。
  • 大文本分片(建议实现方式)
    • 当文本长度超过阈值(如 8KB/32KB
      • 生成 messageId(可复用 senderId + timestamp 或 UUID
      • 拆分为 totalChunks
      • 逐段发送 TEXT,携带 isChunk=true/chunkIndex/totalChunks,并在 payload 中携带 messageId
    • 接收端按 messageId 缓存分片并重组,重组完成后再写入消息列表。
  • 展示与防护
    • 文本内容按纯文本展示(转义),禁止 v-html

后端Spring Boot

  • 处理策略
    • 默认透传广播即可:在 /app/room/{roomCode}/message 收到后补齐 timestamp 并广播。
    • (可选)限流/长度限制:防刷屏与恶意超大文本。

协议与数据

  • type=TEXT
  • payload 推荐字段:
    • content:文本内容(单片)
    • isChunk:是否为分片
    • chunkIndex/totalChunks:分片序号与总片数
    • messageId:(建议新增)用于重组与去重

边界与注意点

  • 重组内存:前端缓存分片需设定超时清理,避免长期占用内存。
  • 乱序/丢片WebSocket 一般有序但重连/异常情况下仍可能丢失;可以在 UI 上提示“分片未完整接收”。