[Django] 消息推送

作者: alue | 来源:发表于2022-04-13 22:27 被阅读0次

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

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


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

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

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

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

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

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

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

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

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

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

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

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

    相关文章

      网友评论

        本文标题:[Django] 消息推送

        本文链接:https://www.haomeiwen.com/subject/uirzsrtx.html