【问题标题】:Django continuously sending data to clients based on eventsDjango根据事件不断向客户端发送数据
【发布时间】:2012-12-17 21:59:26
【问题描述】:

我制作了一个小应用程序来充当使用请求的浏览器,它利用库的功能来处理会话并将 CSRF 令牌正确地传递给 Django。

这个连接到服务器的应用有多个,需要处理身份验证和会话,就完成了。

我需要让客户端永久连接到 Django 服务器端,我认为这可以通过设置会话仅在客户端关闭或断开连接时过期来处理。

我想做的另一件事是让 django 开始根据服务器上的一些事件发送数据,利用经过身份验证和登录的客户端的打开会话,我该怎么做?

请记住,处理服务器上的事件并相应地向客户端发送一些消息/数据的函数不是视图函数,可以使用return HttpResponse;尽管如此,HttpResponse 只能为每个请求发送一次响应,而不是每个可能重复的事件,因此可以发送多个响应。

【问题讨论】:

  • Django 不是为此类任务而设计的。尝试基于事件的 Web 服务器实现,例如 Tornado。
  • 谢谢 Alex,我会尝试对基于事件的 Web 服务器进行一些研究。

标签: python django python-requests


【解决方案1】:

要让 django 在没有不可能的内存要求的情况下做到这一点需要付出巨大的努力,即使那样,它仍然比它的价值更难,所以我将提出一些替代方案。

您可能会看到django-socketio 是否会帮助您做您想做的事,但它似乎已经过时了。

上次我不得不将实时事件从 django 应用程序推送到客户端时,我使用 rabbitmq 服务器将消息包传递到队列,该队列连接到我使用 tornado 构建的非常薄的服务器,具有基本的 long-投票方式。这行得通,但它最终变成了一个复杂的系统,有很多移动部件不是最易于维护的。

最近,当我不得不处理推送到客户端的事件时,我使用了 node.js + socket.io,这更容易开始工作(至少如果你没有使用完整的路由功能兔子,我不是。

如果您想在 django 旁边使用该设置,您可以在旁边运行一个单独的 node.js 服务器,但是您正在为 django 提供服务,并将 HAproxy 放在整个堆栈的前面,以避免跨域问题。剩下的唯一问题是如何在节点服务器和您的 django 应用程序之间进行连接,这可能是私有端口上的 HTTP 调用、redis pub/sub 设置、某种消息设置(如 rabbit 或 zeromq)或任何其他您梦寐以求的东西起来。

【讨论】:

  • 谢谢杰夫。阅读您的答案后,我可以得出结论,在不使用 Node.js 的情况下使用 django 进行此类实现的最简单方法(这会给我的项目增加不必要的复杂性)是使用 rabbitmq 或类似的,同时在客户端使用一些消息传递库,例如 pymq。我在您的回答中真正不明白的是,您为什么在客户端使用 Tornado,是因为您遇到了仅使用客户端消息队列处理消息的问题,或者您的意思是不同的东西,我在这里不明白?跨度>
  • 在我们的情况下,我们要求客户端是一个不能直接连接到rabbit的网络浏览器,所以我们所做的是在Tornado + Stormed中编写一个小型(
  • 我明白你的意思了,我现在更清楚了。我会做一些研究并将我的问题(如果有的话)传递给这个 SO 线程。再次感谢:))
  • 我决定在 Nginx 后面使用 Tornado 和 Django,它们将做路由和静态文件服务,而 rabbitmq 在服务器端所有它们的后面。在客户端,我将使用 Tornado Async Http clinet 和 Stormed 作为 MQ 客户端。您能否向我传递一个与长拉龙卷风服务器通信的客户端龙卷风示例代码以及您如何与 Storemd 集成?另一件事是,在客户端和 sserver 之间来回传递文件​​,我上面描述的设计是否可行?这个客户端gist.github.com/4370439 可以与长彗星服务器一起使用吗?
  • 任何http客户端都应该能够进行长轮询,只要你能设置超时时间。我实际上不确定这个要点是如何工作的,因为我不知道 httpclient 来自哪里。这个问题展示了如何使用标准http客户端stackoverflow.com/questions/265720/http-request-timeout
猜你喜欢
  • 2013-12-31
  • 2022-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-01
  • 2017-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多