【问题标题】:Django Push HTTP Response to users [closed]Django向用户推送HTTP响应[关闭]
【发布时间】:2011-07-25 16:24:47
【问题描述】:

我目前有一个用 Django 编写的非常简单的 Web 应用程序,我想在我的应用程序中实现回调/推送通知服务之类的功能。

例如: 当一个用户(客户端)将照片上传到服务器时,服务器会通知所有其他连接的用户该照片。

我想我可以使用 Django 信号在用户上传照片时产生回调,但我如何让 Django 向其他用户发布通知?此通知可以是警报,也可以只是将其他用户重定向到显示上传图片的新 html。我更喜欢后者。

我是网络编程的初学者,所以我不确定这是否符合要求,因为需要一个“实时网络应用程序”来实现诸如彗星或长轮询之类的东西。我的应用程序类似于聊天应用程序,只是我提交的不是文本文件而是图像文件。因此,我认为彗星解决方案会起作用。我已经尝试查看 Orbited 和 Twisted 很长时间了,但在使用 Django 实现它时没有运气,可能是因为我不明白如何使用彗星解决方案完成我想要的。我希望更有经验的程序员指出我究竟需要什么才能完成这个任务,或者我是否正朝着正确的方向前进(使用彗星)。

如果有人能给我一些关于如何进行的提示和提示,以及教程链接或指南,我将不胜感激。

【问题讨论】:

    标签: django twisted push orbited


    【解决方案1】:

    HTTP 本质上是一个“拉”协议——即,客户端从服务器拉数据,等待一段时间,然后再拉更多数据。实际上没有严格的 HTTP 方式将数据从服务器“推送”到客户端。

    当您需要“推送”给客户时,您基本上有三种选择。

    (1) 进行轮询——使用 Ajax/javascript 每 X 次轮询服务器。 X 越小,“感觉”就越像推送,但服务器必须不断响应这些请求的开销也越大。

    (2) 使用websockets。 HTML5 规范的一部分是称为 websockets 的东西。 Websockets 允许浏览器打开到服务器的持久连接。一旦这个连接被打开,数据就可以从客户端到服务器和服务器到客户端来回推送,就像使用更传统的 TCP 套接字一样。 websockets 的问题(我上次听说的)是它们在浏览器之间仍然有点喜怒无常,当然在旧版浏览器中根本无法工作根本

    (3) 使用Flash with a Javascript interface。 Flash 具有设置persistent TCP connections 的能力,可用于推送/拉取数据,就像使用“普通”TCP 连接一样。 (也请参阅这个 SO 问题:HTTP push examples in Flex


    如果你是从头开始这个项目,我建议你用Node.jsSocket.io 编写你的后端。 Socket.io 是“类套接字”框架,您可以对其进行编程,然后 Javascript 客户端(在您的网络浏览器中运行)智能地确定要使用的最佳“持久连接”——首先它尝试使用 Websockets,然后是 Flash,然后各种类型的长轮询。


    但既然你说你想使用 Python/Django,那么你应该查看Django-Websockets——一个在 Django 中使用 websockets 的框架。但请务必阅读作者在页面上放置的免责声明,使用它存在一些重大困难/限制,主要是因为 Django 没有在设计时使用 websockets介意。

    我认为,当用户的浏览器不支持时,最好的办法是使用带有智能回退到 Ajax 轮询的 Websockets。

    【讨论】:

    • 我明白了。感谢您的建议。在选择我的 web 框架平台之前,我应该对这个推送服务做更多的研究。虽然说实话,在我的网络应用程序的早期阶段,我从未想过需要推送服务。现在我只是认为拥有它会很好,但直到我用新的后端重做我的项目。另外,感谢 Django-websockets 的建议!我可能只是修补它。 :)
    • 自 1.9 版以来,uWSGI 现在支持 Websocket,因此现在可以忽略免责声明 - github.com/unbit/uwsgi-docs/blob/master/WebSockets.rst
    【解决方案2】:

    如果你曾经使用过 nginx,这是一个不错的选择 :),你可以使用 push 模块http://pushmodule.slact.net/,我发现它很容易使用。 您有一个 URL 用于在通道上发布消息(这可以在 python 中轻松完成,例如使用 httplib),以及一个用于从通道中提取消息的 URL(并且一个通道可能被多个用户使用)。有关 jquery 集成,另请参阅 http://blog.jamieisaacs.com/2010/08/27/comet-with-nginx-and-jquery/

    【讨论】:

    • 感谢您的建议!一旦我尝试了 Django websockets,我会研究这个,因为它看起来更容易理解。
    猜你喜欢
    • 1970-01-01
    • 2010-10-03
    • 2014-05-17
    • 1970-01-01
    • 2011-12-07
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多