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

37 lines
1.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 上提示“分片未完整接收”。