我做了一个小应用程序,充当使用请求的浏览器,利用库的功能来处理会话并正确地将CSRF令牌传递给Django。
这种连接到服务器的多个应用程序需要处理身份验证和会话,并且已经完成。
我需要将客户端永久连接到Django服务器端,我认为这可以通过设置会话仅在客户端关闭或断开连接时到期来处理。
我想做的另一件事是让django开始根据服务器上的一些事件发送数据,利用经过身份验证和登录的客户端的开放会话,我该怎么做?
请记住,将处理服务器上的事件并相应地向客户端发送一些消息/数据的功能不是视图功能,其中可以使用return HttpResponse
;即使HttpResponse只能按照请求发送一次响应,而不是每次可能重复的事件,因此可以发送多个响应。
答案 0 :(得分:1)
在没有不可能的内存要求的情况下,需要付出巨大的努力才能让django做到这一点,即便如此,它仍然会比它的价值更难,所以我会提出一些替代方案。
你可能会看到django-socketio是否可以帮助你做你想做的事情,但似乎它已经过时了。
上次我不得不将django应用程序中的实时事件推送到客户端时,我使用了一个rabbitmq服务器将消息包传递到队列,这些队列连接到我使用龙卷风构建的非常瘦的服务器,基本长 - 投票方法。这很有效,但它最终成为一个复杂的系统,有许多不易维护的移动部件。
最近,当我不得不将事件推送到客户端时,我使用了node.js + socket.io,这样做起来要简单得多(至少如果你没有使用完整的路由功能)兔子,我不是。
如果你想在django旁边使用该设置,你可以运行一个单独的node.js服务器,但是你正在服务django,并将HAproxy放在整个堆栈的前面,以避免跨域问题。剩下的唯一问题是如何在节点服务器和你的django应用程序之间建立连接,这可能是私人端口上的HTTP调用,redis pub / sub设置,某种类型的消息设置,如rabbit或zeromq,或者你梦想的任何其他内容起来。