
1) 【一句话结论】:在冷链监控的实时温湿度数据场景,推荐采用WebSocket实现双向实时通信(核心方案),结合SSE作为兼容性补充,并设计基于本地存储的离线缓存策略,确保网络断开后数据可回退,同时通过心跳或时间戳机制保证数据新鲜度。
2) 【原理/概念讲解】:
老师解释:要实现实时温湿度数据推送,需理解两种技术核心差异。
3) 【对比与适用场景】:
| 特性/场景 | WebSocket | Server-Sent Events (SSE) |
|---|---|---|
| 定义 | 持久化双向通信协议 | 单向服务器推送的HTTP协议 |
| 通信方向 | 双向实时 | 单向(服务器→客户端) |
| 连接建立 | 需握手(Upgrade头),长连接 | 普通HTTP GET请求 |
| 数据格式 | 自定义(JSON、二进制等) | 文本流(以event:开头) |
| 兼容性 | 现代浏览器支持,部分旧版不支持 | 所有现代浏览器支持 |
| 使用场景 | 需双向交互(如实时控制、报警指令) | 单向实时更新(如温湿度、股票行情,浏览器不支持WebSocket时) |
| 注意点 | 连接建立成本高,需处理断开重连 | 仅支持文本流,数据格式固定,不支持双向 |
4) 【示例】:
const socket = new WebSocket('wss://api.9377.com/temperature');
socket.onopen = () => {
socket.send(JSON.stringify({ type: 'subscribe', channel: 'cold-chain' }));
};
socket.onmessage = (event) => {
const data = JSON.parse(event.data);
if (data.type === 'temperature') {
updateUI(data.value); // 更新UI
cacheData(data); // 存入本地缓存
}
};
socket.onclose = () => {
setTimeout(() => connectWebSocket(), 5000); // 断开重连
};
GET /temperature-stream HTTP/1.1
Host: api.9377.com
Connection: keep-alive
Cache-Control: no-cache
Accept: text/event-stream
服务器响应:
event: temperature
data: 5.2
\n\n
event: temperature
data: 5.3
\n\n
5) 【面试口播版答案】:
面试官您好,针对农产品加工系统的实时温湿度监控,我会这样设计网络请求:
首先,核心方案是采用WebSocket实现双向实时通信,因为冷链监控需要服务器实时推送温湿度数据,同时客户端可能需要发送控制指令(如报警),所以WebSocket的持久连接能保证低延迟。如果浏览器不支持WebSocket,会补充SSE作为备选,用单向推送满足基本需求。
然后,数据缓存策略上,客户端会使用IndexedDB或LocalStorage存储最近30分钟内的数据,当网络断开时,从缓存中回退数据,确保用户能看到历史数据。具体来说,WebSocket连接建立后,订阅温湿度通道,服务器推送数据时,客户端不仅更新UI,还会将数据存入本地缓存;如果网络中断,应用会从缓存中读取最近的数据,并在网络恢复后同步更新。这样既保证了实时性,又解决了离线场景的问题。
6) 【追问清单】:
7) 【常见坑/雷区】: