1. 基于WebSocket的实时数据推送监控

基于WebSocket的实时数据推送监控 学习卡片

任务说明

构建一个基于WebSocket的实时数据推送监控系统,实现服务端定时推送模拟传感器数据,客户端实时接收并展示数据变化,同时当数据超过设定阈值时触发报警提示。本案例使用Node.js原生WebSocket模块实现,无需第三方依赖。

服务端实现


// server.js
const WebSocket = require('ws');

const wss = new WebSocket.Server({ port: 8080 });
const THRESHOLD = 80; // 温度报警阈值

// 模拟传感器数据生成
function generateSensorData() {
  return {
    timestamp: new Date().toISOString(),
    temperature: 20 + Math.random() * 70, // 20~90度
    humidity: 30 + Math.random() * 50,    // 30%~80%
    deviceId: 'DEV-001'
  };
}

wss.on('connection', (ws) => {
  console.log('客户端已连接');
  
  // 每秒推送一次数据
  const timer = setInterval(() => {
    const data = generateSensorData();
    const payload = JSON.stringify({
      type: 'data',
      data: data,
      alarm: data.temperature > THRESHOLD ? '高温报警' : null
    });
    ws.send(payload);
  }, 1000);

  ws.on('close', () => {
    clearInterval(timer);
    console.log('客户端已断开');
  });
});

console.log('WebSocket服务已启动: ws://localhost:8080');

客户端实现


<!-- index.html -->
<!DOCTYPE html>
<html>
<body>
  <h3>实时监控面板</h3>
  <div id="status">连接中...</div>
  <div id="data"></div>
  <div id="alarm" style="color:red;font-weight:bold"></div>

  <script>
    const ws = new WebSocket('ws://localhost:8080');
    const statusEl = document.getElementById('status');
    const dataEl = document.getElementById('data');
    const alarmEl = document.getElementById('alarm');

    ws.onopen = () => {
      statusEl.textContent = '已连接';
      statusEl.style.color = 'green';
    };

    ws.onmessage = (event) => {
      const msg = JSON.parse(event.data);
      if (msg.type === 'data') {
        const d = msg.data;
        dataEl.innerHTML = `时间: ${d.timestamp}<br>
          温度: ${d.temperature.toFixed(1)}°C<br>
          湿度: ${d.humidity.toFixed(1)}%<br>
          设备: ${d.deviceId}`;
        
        if (msg.alarm) {
          alarmEl.textContent = `⚠ ${msg.alarm} (温度超过${THRESHOLD}°C)`;
        } else {
          alarmEl.textContent = '';
        }
      }
    };

    ws.onerror = (err) => {
      statusEl.textContent = '连接错误';
      statusEl.style.color = 'red';
    };

    ws.onclose = () => {
      statusEl.textContent = '连接断开';
      statusEl.style.color = 'red';
    };
  </script>
</body>
</html>

运行与验证

依赖安装:执行 npm init -y && npm install ws 安装WebSocket库。

启动服务:运行 node server.js,控制台输出“WebSocket服务已启动”即表示成功。

打开客户端:用浏览器直接打开 index.html,页面显示“已连接”且每秒刷新一次温度、湿度数据。

验证报警:观察温度值,当超过80°C时页面出现红色报警文字;低于阈值时报警消失。由于数据随机生成,可在短时间内观察到报警触发与恢复。

判定标准:① 浏览器页面每秒更新一次数据;② 温度超过80时显示报警,低于80时报警消失;③ 服务端控制台显示客户端连接与断开日志。
浏览器 WebSocket服务 传感器模拟 1. 建立连接 (ws://localhost:8080) 2. 每秒生成传感器数据 3. 推送JSON数据(温度/湿度) 温度 > 80°C ? 触发报警 4. 报警信息推送 5. 关闭连接