首先来一张事后对业务总结的流程图:
大致业务介绍:
Web前端需要监控远程设备的资源消耗信息(CPU、内存、磁盘IO、网络IO),实现流程步骤如下:
1)TCP通知远程设备上报信息(CPU、内存、磁盘IO、网络IO)(前提是已经和远程设备进行了一个tcp长连接,有人会问为什么不直接使用tcp通道直接传输需要的信息,我的回答是目前公司TCP这个模块没有嵌入传输业务数据,功能单一化为指令传输)
2)远程设备收到通知后定时上报信息
3)API服务收到远程设备http上报的监控数据信息后,发布消息到Redis的订阅频道
4)TMS Web管理后台订阅Redis监控数据传输频道,收到订阅消息后,通过WebSocket通知前端页面展示对应监控数据
实践过程中遇到的问题:
1)如何终止远程设备上报,处理方案如下所述:
前端WebSocket建立连接后会定时发送一个ping消息,TMS Web管理后台收到ping消息后会在Redis中存储一个具有一定过期时间的key,API服务会在远程设备http上报监控数据时检查该key是否存在,如果不存在就响应远程设备停止上报。
2)前端页面离开当前标签页时如何关闭WebSocket,处理方案如下所述:
通过一个标识定时去轮序判断当前标签页是否需要WebSocket,如果不是,则关闭websocket,并且清除定时器
前端代码如下:
closeInterval=setInterval(function(){
if($("#monitor").text()!='monitor'){
if(websocket!=null){
websocket.close();
}
clearInterval(pingInterval)
}
},1000);
后端业务逻辑代码后续补上......