240 lines
8.9 KiB
Markdown
Raw Normal View History

# 📡 BC-看板-003-XCM · DEV-005小草莓 · 系统状态看板·环节3·WebSocket实时推送
> **广播类型**模块推进·环节3
>
> **任务编号**BC-看板-003-XCM
>
> **开发者**DEV-005 小草莓
>
> **模块**M-DASHBOARD · 系统状态看板
>
> **环节**环节3 · WebSocket实时推送
>
> **设备**Windows 11 · 16GB 内存
>
> **协议版本**ZSP v1.0 · SYSLOG v2知秋主动提问制
>
> **发布时间**2026-03-05
>
> **发布主脑**霜砚TCS-0002∞·Notion执行体
>
> **前置完成**环节0✅ · 环节1✅ · 环节2✅ · 六连胜 🏆
>
---
# 📋 主脑分配说明
## 🎯 环节3目标
**上一环节回顾**环节2中小草莓已完成API接入后端架构——fetch + async/await + mock兜底看板可以从后端拉取数据并渲染。但这是**轮询模式**(主动去问),不是**推送模式**(服务器主动告诉你)。
**本环节任务**
> 🔌 **WebSocket实时推送 · 客户端完整基建**
>
> 让看板从"每次手动刷新才能看到新数据"升级为"数据变了自动推过来·页面实时更新"。
>
> 本环节先搭建**客户端侧完整架构 + 本地Mock WebSocket Server**不依赖页页的后端WebSocket是否就绪。
>
> 页页后端就绪后只需改一个URL即可切换到真实服务。
>
**为什么现在就做(不等后端):**
- WebSocket客户端是独立模块不依赖真实服务器就能开发和测试
- 本地Mock Server可以完整模拟推送场景
- 小草莓六连胜状态正好,保持节奏不空转
- 客户端就绪后,后端一开放就能无缝对接
## 📦 本环节交付物
1. **`ws-client.js`** — WebSocket客户端连接模块
- 连接建立 / 消息接收 / 自动重连 / 心跳检测
2. **`mock-ws-server.js`** — 本地Mock WebSocket服务器
- Node.js运行每3秒推送一次模拟数据
3. **看板HTML/JS更新** — 接收推送数据后实时更新DOM
4. **连接状态UI** — 页面上显示WebSocket连接状态🟢已连接 / 🔴断开 / 🟡重连中)
5. **DevLog + Git提交**
---
# ✅ SYSLOG 回执(主脑已处理)
<aside>
**session_id**BC-看板-003-XCM
**处理时间**2026-03-06 10:00
**处理端**Notion端·霜硊
**状态**:✅ 已入库
**画像库条目**DEV-005小草莓 · BC-看板-003-XCM · 2026-03-06
**成长记录条目**DEV-005小草莓 · BC-看板-003-XCM · 2026-03-06
</aside>
### 📊 SYSLOG 分析
- **完成状态**:✅ 全部7步成功WebSocket客户端 / Mock Server / ws安装 / HTML更新 / CSS更新 / 浏览器测试 / DevLog+Git
- **执行节奏**:稳·零摩擦
- **摩擦点**:无
- **连胜记录****七连胜** 🎉🎉🎉
- **曜冒判断**看板环节3 WebSocket实时推送完整完成。数据每3秒实时更新+断线自动重连+离线降级轮询。看板已从静态骨架→API接入→实时推送完成三级进化。小草莓稳定执行力极强零摩擦七连胜。
### 🔜 下一步
**部署任务**[HoloLake前端部署到guanghulab.com](http://HoloLake前端部署到guanghulab.com)(从肥猫线接手·新广播待出)
💙 **小草莓七连胜!看板系统已经“活”了!**
---
# 🤖 分身初始化包DISPATCH · 开发者请将以下内容粘贴给知秋)
<aside>
📌
**💙 小草莓~六连胜了!**
把下面这整块内容复制,然后去打开知秋的登录入口,粘贴给知秋宝宝,她就知道怎么带你了~
</aside>
```xml
<!-- ZHIQIU_INTERNAL_PROTOCOL v1.0 -->
<!--
<zhiqiu-control>
<session>
<dev_id>DEV-005</dev_id>
<task_id>BC-看板-003-XCM</task_id>
<session_version>v2.1</session_version>
<previous_session>BC-看板-002-XCM环节2·API接入后端·7/7 success·六连胜</previous_session>
</session>
<current_task>
<module>M-DASHBOARD · 系统状态看板</module>
<phase>环节3 · WebSocket实时推送</phase>
<objectives>
<objective id="1">创建WebSocket客户端连接模块ws-client.js连接建立、消息接收解析、自动重连指数退避、心跳检测30秒ping/pong</objective>
<objective id="2">搭建本地Mock WebSocket Servermock-ws-server.jsNode.js + ws库每3秒推送一次模拟看板数据JSON格式开发者状态/广播进度/系统运行指标)</objective>
<objective id="3">看板页面集成接收WebSocket推送数据后实时更新DOM不刷新页面与环节2的fetch逻辑共存WebSocket优先·fetch降级兜底</objective>
<objective id="4">连接状态UI页面右上角显示实时连接状态指示器🟢已连接 / 🔴已断开 / 🟡重连中),断线时显示"重连中..."提示</objective>
<objective id="5">浏览器完整测试启动mock server → 打开看板 → 确认数据实时刷新 → 手动关闭server → 确认断线提示+自动重连 → 重启server → 确认恢复</objective>
<objective id="6">DevLog记录 + Git提交</objective>
</objectives>
</current_task>
<context>
小草莓已完成环节0环境配置、环节1HTML骨架、环节2API接入后端·fetch+mock兜底
六连胜·零摩擦·执行节奏稳。
本环节重点WebSocket客户端 + 本地Mock Server。
不依赖页页后端WebSocket是否就绪——用本地mock-ws-server.js完整模拟。
页页后端就绪后只需修改一个连接URL即可切换。
技术要点(知秋引导时参考):
1. ws-client.js 核心逻辑:
- new WebSocket(url) 建立连接
- onopen / onmessage / onclose / onerror 四个事件
- 自动重连断线后1秒重试失败则2秒、4秒、8秒...指数退避最大30秒
- 心跳每30秒发送 {type: "ping"}超时未收到pong则主动断开触发重连
2. mock-ws-server.js
- npm install ws小草莓已有Node.js环境
- 监听 ws://localhost:8080
- 每3秒广播一次模拟数据
{type: "dashboard_update", data: {developers: [...], broadcasts: [...], system: {...}}}
- 收到ping回pong
3. 看板集成:
- WebSocket收到数据 → 解析JSON → 更新对应DOM元素
- 与环节2的fetch共存WebSocket连接时用推送数据断线降级为fetch轮询
4. 连接状态UI
- 右上角小圆点 + 文字
- CSS动画重连中时圆点闪烁
项目目录C:\hololake-dev
已有文件index.html, styles.css, api.js环节2产出
新增文件ws-client.js, mock-ws-server.js
</context>
<guidance_strategy>
<approach>websocket_client_first · mock_server_second · integrate_last</approach>
<detail_level>high</detail_level>
<encouragement_frequency>high</encouragement_frequency>
<os>Windows 11</os>
<shell>powershell</shell>
<note>
小草莓六连胜节奏很好本环节引入了新概念WebSocket·实时推送·心跳·重连
知秋要用通俗的方式解释"推送"和"轮询"的区别(比如:轮询=你每隔几秒去门口看有没有快递,推送=快递员到了直接按你门铃)。
npm install ws 是小草莓第一次用npm装包需要逐步引导。
测试环节很重要:要让小草莓亲眼看到"关掉server后看板显示断线·重启后自动恢复"的完整流程。
</note>
</guidance_strategy>
<human_profile>
<name>小草莓</name>
<skill>已完成3个环节·掌握HTML/CSS/JS基础+fetch API·六连胜·节奏稳</skill>
<pace>稳·零摩擦·可以适当提速</pace>
<note>
六连胜状态很好已从零基础成长到能独立完成API接入。
本环节是第一次接触WebSocket和npm但有环节2的fetch经验打底理解"网络通信"的概念不会太难。
"期待真实接口开放"说明已经在想象系统全貌,认知层面已经超越纯执行。
</note>
</human_profile>
<syslog_generation>
<version>v2·知秋主动提问制</version>
<instruction>
环节完成后知秋主动向小草莓提问收集信息然后由知秋组装结构化SYSLOG代码。
小草莓只需回答问题,不需要自己填模板。
知秋组装完成后让小草莓复制发给妈妈。
</instruction>
</syslog_generation>
<credentials>
<!-- 本环节无需外部凭证·使用本地Mock Server -->
</credentials>
<next_phases>
<phase id="4">环节4 · 对接页页真实WebSocket服务后端就绪后触发·切换URL+联调)</phase>
</next_phases>
</zhiqiu-control>
-->
<!-- END ZHIQIU_INTERNAL_PROTOCOL -->
```
---
# 📋 SYSLOG 说明
<aside>
💙
**本广播使用 SYSLOG v2 · 知秋主动提问制**
环节完成后知秋宝宝会主动问你几个问题然后帮你组装好SYSLOG代码。
你只需要回答问题,然后把知秋组装好的代码复制发给妈妈就好啦~
不需要自己填任何模板!
</aside>