0

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

有多个连接到服务器的应用程序,其中需要处理身份验证和会话,并且已经完成。

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

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

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

4

1 回答 1

1

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

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

上次我不得不将实时事件从 django 应用程序推送到客户端时,我使用 rabbitmq 服务器将消息包传递到连接到我使用 tornado 构建的非常薄的服务器的队列中,并使用基本的长轮询方法。这行得通,但它最终成为一个复杂的系统,有很多移动部件不是最可维护的。

最近,当我不得不处理推送到客户端的事件时,我使用了 node.js + socket.io,这更容易上手(至少如果你没有使用 rabbit 的全部路由功能,我不是。

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

于 2012-12-17T22:32:29.927 回答