Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django根据事件不断向客户端发送数据_Python_Django_Python Requests - Fatal编程技术网

Python Django根据事件不断向客户端发送数据

Python Django根据事件不断向客户端发送数据,python,django,python-requests,Python,Django,Python Requests,我制作了一个小应用程序来充当使用请求的浏览器,它利用库的功能来处理会话并将CSRF令牌正确地传递给Django 有多个这样的应用程序连接到服务器,在那里需要处理身份验证和会话,这是可以完成的 我需要将客户端永久连接到Django服务器端,我认为这可以通过设置会话只在客户端关闭或断开连接时过期来处理 我想做的另一件事是让django开始根据服务器上的一些事件发送数据,利用与经过身份验证和登录的客户端的开放会话,我该如何做 请记住,将处理服务器上的事件并相应地向客户端发送一些消息/数据的功能不是查看

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

有多个这样的应用程序连接到服务器,在那里需要处理身份验证和会话,这是可以完成的

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

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


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

要让django做到这一点需要付出巨大的努力,而不需要不可能的内存需求,即使如此,这仍然比它的价值更难,因此,我将介绍一些替代方案

你可能会看到它是否会帮助你做你想做的事情,但是它似乎已经过时了

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

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


如果你想在django旁边使用这个设置,你可以在django旁边运行一个单独的node.js服务器,并将HAproxy放在整个堆栈的前面,以避免跨域问题。剩下的唯一问题是如何在节点服务器和你的django应用程序之间连接,这可能是在专用端口(redis p)上的HTTP调用ub/sub设置,一些消息传递设置,如rabbit或zeromq,或任何您梦寐以求的东西。

Django不是为此类任务设计的。尝试基于事件的web服务器实现,如Tornado。感谢Alex,我将尝试对基于事件的web服务器进行一些研究。感谢JeffS。阅读您的答案后,我可以得出结论,使用最简单的在不使用Node.js的情况下使用django实现这种功能的方法(这将给我的项目增加不必要的复杂性)是使用rabbitmq或类似工具,同时在客户端使用一些消息传递库,例如pymq。我在您的回答中真正不理解的是,为什么在客户端使用Tornado,是因为您仅使用客户端消息队列处理消息时遇到了问题,还是您的意思有所不同?在我们的si中,我不明白事实上,我们要求客户端是一个不能直接连接到rabbit的web浏览器,所以我们只写了一个小的(我明白你的意思,现在事情对我来说更清楚了。我会做一些研究,如果有问题,我会把我的问题传给这个so线程。再次感谢:))我决定在Nginx后面使用Tornado和Django,这将完成路由和静态文件服务,而rabbitmq将位于服务器端所有这些服务的后面。在客户端,我将使用Tornado Async Http clinet plus Stormed for作为MQ客户端。你能给我一个客户端的tornado的示例代码,它与一个长拖拽的tornado服务器进行通信,以及你是如何集成Storemd的吗?另一件事是,要在客户端和sserver之间来回传递文件,我上面描述的设计是否可行?此客户端是否可以与长comet服务器一起工作?只要您可以设置超时,任何http客户端都应该能够进行长轮询。事实上,我不确定这个要点是如何工作的,因为我不知道httpclient来自哪里。这个问题展示了如何使用标准http客户机进行此操作