需求拆解
「只有網頁,想實現遠程信息采集」→ 需要:
- 前端頁面:展示實時/歷史數據、圖表、告警。
- 後端服務:接收采集數據、存儲、提供查詢 API。
- 采集端/邊緣網關:連接傳感器/設備,協議轉換(Modbus、OPC UA、MQTT 等),上傳數據。
- 通信通道:內網/外網、VPN、4G/5G、LoRa 等。
架構選型建議
方案一:傳統輪詢(簡單、延遲秒級可接受)
- 前端
setInterval / AJAX 定時請求後端 API。
- 後端查詢數據庫返回最新數據。
- 優點:實現簡單、兼容性好。缺點:請求壓力大、非真正實時。
方案二:長輪詢 / Comet(偽實時)
- 前端發起請求 → 後端 Hold 住連接直到有新數據或超時 → 返回 → 前端立即發起下一次。
- 減少空請求,延遲可達亞秒級。
方案三:WebSocket(真實時、雙向)
- 前後端建立持久連接,服務端主動推送數據變更。
- 技術棧:Spring Boot + WebSocket / Netty / Node.js + Socket.io / Go + Gorilla WebSocket。
- 需處理斷線重連、心跳、擴展性(Redis Pub/Sub 多實例廣播)。
方案四:Server-Sent Events (SSE)(單向實時、HTTP/2 友好)
- 服務端單向推送文本事件流,瀏覽器原生
EventSource 接收。
- 適合「服務端→客戶端」單向監測場景,自動重連、防火牆友好。
方案五:MQTT over WebSocket(物聯網標準)
- 采集端/網關發布 MQTT 主題,後端訂閱並轉發給前端 WebSocket。
- 適合海量設備、弱網環境,QoS 保證消息送達。
關鍵技術點清單
| 模塊 | 關鍵技術/選型 |
| 前端圖表 | ECharts、Highcharts、Chart.js、Grafana (嵌入) |
| 時序數據庫 | InfluxDB、TimescaleDB、TDengine、IoTDB |
| 消息隊列 | Kafka、RabbitMQ、EMQX (MQTT Broker)、Redis Streams |
| 後端框架 | Spring Boot、Node.js、Go、Python FastAPI |
| 部署 | Docker + Kubernetes、邊緣網關就地部署 |
| 安全 | HTTPS、JWT/OAuth2、設備認證 (X.509/PSK) |
最小可行性產品 (MVP) 步驟
- 搭建後端 API:
POST /data 接收采集數據,GET /latest?deviceId=xxx 查詢最新值。
- 前端頁面:ECharts 實時折線圖,
setInterval 輪詢 API(先跑通流程)。
- 模擬采集端:Python 腳本定時發送隨機數據到 API。
- 引入時序庫替換關係型資料庫,優化寫入/查詢性能。
- 升級為 WebSocket/SSE 推送,去除輪詢。
總結
B/S 遠程監測系統核心在於「采集端上傳 → 後端存儲/轉發 → 前端展示」。起步用 **AJAX 輪詢 + 關係型資料庫** 最快跑通;演進引入 **時序庫 + WebSocket/SSE/MQTT** 實現高性能真實時。根據項目規模、實時性要求、團隊技術棧選型即可。