72 lines
2.7 KiB
JavaScript
72 lines
2.7 KiB
JavaScript
|
|
// ========== HoloLake 看板 · Mock WebSocket 服务器 ==========
|
|||
|
|
// 运行:node mock-ws-server.js
|
|||
|
|
// 功能:每3秒推送一次模拟数据,处理心跳
|
|||
|
|
|
|||
|
|
const WebSocket = require('ws');
|
|||
|
|
const PORT = 8080;
|
|||
|
|
|
|||
|
|
const wss = new WebSocket.Server({ port: PORT });
|
|||
|
|
|
|||
|
|
console.log(`[Mock WS] 服务器启动,监听端口 ${PORT}`);
|
|||
|
|
|
|||
|
|
// 模拟数据生成函数
|
|||
|
|
function generateMockData() {
|
|||
|
|
return {
|
|||
|
|
type: 'dashboard_update',
|
|||
|
|
timestamp: new Date().toISOString(),
|
|||
|
|
data: {
|
|||
|
|
system: {
|
|||
|
|
system_status: 'running',
|
|||
|
|
version: 'v0.5.0',
|
|||
|
|
uptime: '73h 22m',
|
|||
|
|
api_calls_today: 187,
|
|||
|
|
active_developers: 7,
|
|||
|
|
last_deploy: '2026-03-05 08:15'
|
|||
|
|
},
|
|||
|
|
developers: [
|
|||
|
|
{ id: 'DEV-001', name: '页页', module: '后端中间层', status: 'active', progress: 100, phase: '环节5·联调' },
|
|||
|
|
{ id: 'DEV-002', name: '肥猫', module: 'M01登录界面', status: 'active', progress: 72, phase: '环节2·等待' },
|
|||
|
|
{ id: 'DEV-003', name: '燕樊', module: 'M15云盘系统', status: 'waiting', progress: 55, phase: '环节1·等SYSLOG' },
|
|||
|
|
{ id: 'DEV-004', name: '之之', module: '钉钉机器人', status: 'waiting', progress: 20, phase: '环节0·等SYSLOG' },
|
|||
|
|
{ id: 'DEV-005', name: '小草莓', module: '系统状态看板', status: 'active', progress: 100, phase: '环节3·WebSocket' },
|
|||
|
|
{ id: 'DEV-009', name: '花尔', module: 'M05用户中心', status: 'active', progress: 48, phase: '环节2·编码' },
|
|||
|
|
{ id: 'DEV-010', name: '桔子', module: 'M06工单管理', status: 'active', progress: 35, phase: '环节1·广播待出' }
|
|||
|
|
],
|
|||
|
|
broadcasts: [
|
|||
|
|
{ id: 'BC-看板-003', dev: '小草莓', module: '系统状态看板', phase: '环节3', status: '执行中', time: '03-05 10:15' },
|
|||
|
|
{ id: 'BC-集成-001-M13', dev: '小草莓', module: 'M13协作调度', phase: '环节1', status: '已完成', time: '03-04 08:38' },
|
|||
|
|
{ id: 'DEV-012', dev: '匆匆那年', module: 'M05用户中心', phase: '环节1', status: '等SYSLOG', time: '03-05 09:22' }
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
wss.on('connection', (ws) => {
|
|||
|
|
console.log('[Mock WS] 客户端已连接');
|
|||
|
|
|
|||
|
|
// 心跳响应
|
|||
|
|
ws.on('message', (message) => {
|
|||
|
|
try {
|
|||
|
|
const data = JSON.parse(message);
|
|||
|
|
if (data.type === 'ping') {
|
|||
|
|
ws.send(JSON.stringify({ type: 'pong' }));
|
|||
|
|
}
|
|||
|
|
} catch (e) {
|
|||
|
|
// 忽略非 JSON 消息
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
ws.on('close', () => {
|
|||
|
|
console.log('[Mock WS] 客户端断开');
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 每3秒推送一次模拟数据
|
|||
|
|
const interval = setInterval(() => {
|
|||
|
|
if (ws.readyState === WebSocket.OPEN) {
|
|||
|
|
ws.send(JSON.stringify(generateMockData()));
|
|||
|
|
}
|
|||
|
|
}, 3000);
|
|||
|
|
|
|||
|
|
// 清理 interval
|
|||
|
|
ws.on('close', () => clearInterval(interval));
|
|||
|
|
});
|