【问题标题】:How to build a push system in django?如何在 django 中构建推送系统?
【发布时间】:2012-06-11 06:04:43
【问题描述】:

我需要在django中构建一个推送系统,它的基本功能就是将消息从服​​务器推送到浏览器。

由于不能使用 nodejs,我更喜欢 websocket 或轨道,但我不知道如何在 django 中实现这两个。请为我推荐一种方法,这对我有很大帮助,谢谢。

【问题讨论】:

    标签: django websocket push message orbited


    【解决方案1】:

    一种选择是使用与您的 Django 服务器并行运行的 WebSocket 服务器,该服务器具有 REST/Push API,然后通过简单的 HTTP/POST 从 Django 推送到 WebSocket 服务器,然后将消息传递给所有已连接的 WebSocket 客户端。

    这样,您不需要对现有 Django 应用程序进行任何结构/技术更改,但仍具有可扩展的、基于现代 WebSocket 的推送功能。

    对于上面提供的托管服务,我会看看http://pusher.com

    如果您更喜欢自己运行,我会看看http://autobahn.ws,它被部署为一个可立即运行的虚拟设备(VMware、VirtualBox、Amazon EC2)。你可以在这里找到 REST/API 的工作示例https://github.com/tavendo/AutobahnPushPython

    免责声明:我是 Autobahn Open-source 的作者,并为提供 Autobahn.ws(基于 Autobahn OSS 的商业产品)的 Tavendo 工作。

    【讨论】:

      【解决方案2】:

      Django 不擅长向客户端“推送”东西。如果 django 是您唯一的选择,那么模拟推送的唯一方法是通过长轮询。但这不是有效的。相反,websockets 很热。龙卷风和扭曲可以在这里为您提供帮助。您的问题here也有更完整的答案。

      【讨论】:

      • 我的整个网站都是基于 django 和 Nginx 的,所以我想这不是使用 Tornado 或扭曲的有效方式吗?
      • 为什么不高效?这取决于您的硬件吗?不费吹灰之力,您就可以拥有一个并行的龙卷风进程来处理一些 websockets..
      • 对不起,我对龙卷风不太熟悉,你的意思是与 django 并行的龙卷风服务器吗?我的第一个想法是在 django 中执行此操作,因为 django-websocket 还不错。
      • 是的,我的意思是与 django 并行的龙卷风服务器。 Django-websocket 有一些注意事项,在其文档中有说明。如果你花一点时间,你就会有一个简单的 Tornado websocket 服务器启动并运行。这很容易,看这里感受一下简单:)blog.kagesenshi.org/2011/10/…。享受吧!
      • 这个问题确实困扰了我很长时间,现在我想我接近答案了:) Thx
      【解决方案3】:

      Django 中 websockets 的另一种实现: https://github.com/jonashagstedt/swampdragon

      来自文档:SwampDragon 利用了 Django 出色的 ORM、Tornados 出色的 websocket 支持(带有回退。在 IE7 中测试)和 Redis 超快的速度。

      【讨论】:

        【解决方案4】:

        截至 2016 年,Django Channels 将 websockets 引入 Django(1.8 及更高版本)。

        也是part of the official Django project

        【讨论】:

        【解决方案5】:

        有一个 Django 模块,它支持开箱即用的 websockets,使用 Redis 作为消息队列。 看看这里:https://github.com/jrief/django-websocket-redis

        免责声明:我是该库的作者。

        【讨论】:

        【解决方案6】:

        正如@hymloth 所建议的,更好的方法是使用 tornado 或 node.js。

        但是,如果你必须使用 Django,我写了一篇关于用它实现 WebSocket 的文章,你可能会觉得有用。

        http://curella.org/blog/2012/jul/17/django-push-using-server-sent-events-and-websocket/

        【讨论】:

          【解决方案7】:

          Django omnibus

          在内部使用 tornado 并支持 python 3。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-12-26
            • 1970-01-01
            • 2020-11-08
            • 1970-01-01
            • 2011-07-12
            • 1970-01-01
            • 2019-10-10
            相关资源
            最近更新 更多