收藏js css html

[Django] 消息推送

2022-04-13  本文已影响0人  alue

HTTP机制有个缺陷,就是服务器无法主动向用户推送消息。

想实现下图这种场景的监控,节点1需要向全网发送告警信息,应该怎么实现呢?


最简单的方式是,每个节点的web页面定时向服务器发送请求,获取节点最新的状态信息。

但问题是,如果网络节点特别多,同时告警发生的概率很小的情况下,这种轮询的方式太浪费资源了。

怎么能让web服务实现主动的消息推送呢?

经过实践,我找到了一个适合本场景的架构。

  1. 首先用户向Django发送状态更新请求

  2. 然后用户再向socket.io服务器推送一个事件

  3. socket.io服务器将该事件转发广播给全部节点

  4. 节点收到这个事件后,发起向Django的状态获取请求

  5. Django返回最新的节点状态信息,实现了消息推送。

这个方法,实际上是利用了WebSocket技术,实现了服务器向用户推送信息的功能,弥补了Http的不足。

同时,状态信息仍然由Django来统一管理,避免了数据不一致的情况。

socket.io在这里代替了死板的定时器,而是按需触发请求,提高了计算效率。

上一篇 下一篇

猜你喜欢

热点阅读