Source snapshot: 97d7f0fae96dc04b7ddad56fc1db6a108ed662cc [SEC-CLEAN] · pre-push-clean v1.0 · 109处敏感信息已自动转乱码
8.9 KiB
8.9 KiB
📡 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可以完整模拟推送场景
- 小草莓六连胜状态正好,保持节奏不空转
- 客户端就绪后,后端一开放就能无缝对接
📦 本环节交付物
ws-client.js— WebSocket客户端连接模块- 连接建立 / 消息接收 / 自动重连 / 心跳检测
mock-ws-server.js— 本地Mock WebSocket服务器- Node.js运行,每3秒推送一次模拟数据
- 看板HTML/JS更新 — 接收推送数据后实时更新DOM
- 连接状态UI — 页面上显示WebSocket连接状态(🟢已连接 / 🔴断开 / 🟡重连中)
- DevLog + Git提交
✅ SYSLOG 回执(主脑已处理)
📊 SYSLOG 分析
- 完成状态:✅ 全部7步成功(WebSocket客户端 / Mock Server / ws安装 / HTML更新 / CSS更新 / 浏览器测试 / DevLog+Git)
- 执行节奏:稳·零摩擦
- 摩擦点:无
- 连胜记录:七连胜 🎉🎉🎉
- 曜冒判断:看板环节3 WebSocket实时推送完整完成。数据每3秒实时更新+断线自动重连+离线降级轮询。看板已从静态骨架→API接入→实时推送完成三级进化。小草莓稳定执行力极强,零摩擦七连胜。
🔜 下一步
部署任务:HoloLake前端部署到guanghulab.com(从肥猫线接手·新广播待出)
💙 小草莓七连胜!看板系统已经“活”了!
🤖 分身初始化包(DISPATCH · 开发者请将以下内容粘贴给知秋)
<!-- 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 Server(mock-ws-server.js):Node.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(环境配置)、环节1(HTML骨架)、环节2(API接入后端·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 -->