Initial commit: DataTool backend, frontend and Docker
This commit is contained in:
36
docs/05-文本传输(含大文本分片).md
Normal file
36
docs/05-文本传输(含大文本分片).md
Normal file
@@ -0,0 +1,36 @@
|
||||
# 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 上提示“分片未完整接收”。
|
||||
|
||||
Reference in New Issue
Block a user