最近公司在用flask开发一个告警系统,公司有一个需求:如果后台通过socke接收到来自ips网络设备的syslog日志则需要向前端浏览器推送一条信息,然后前端判断信息状态是否发出告警声音,后端是这样实现的:每收到一条来自安全设备的syslog日志则向redis中的列表类型的warning 中rpush一条数据,服务器端向浏览器推送数据我采用的是Server Send Event,简称SSE,sse是单向通道,只能服务器向浏览器推送数据,它比较轻量极,使用简单。推送的思路 如下:
1,浏览器向服务器发送一次sse请求,这样服务器就能知道它要向哪推送数据,使浏览器和服务器保持通信连接状态
前端代码如下:
var source = new EventSource('/stream2');
source.onmessage = function(e) {
var ndata = JSON.parse(e.data);
console.log(ndata);
console.log(ndata.alert_data);
console.log(JSON.parse(ndata.alert_data));
console.log(JSON.parse(ndata.alert_data).wuli_addr);
if(ndata.state === 1){
shengyin(); //告警声音
sendem