Initial commit: DataTool backend, frontend and Docker

This commit is contained in:
liu
2026-01-31 00:51:14 +08:00
commit 59bb8e16f5
69 changed files with 9449 additions and 0 deletions

View 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 上提示“分片未完整接收”。