我需要在我的应用程序中实现长轮询来检索事件。但我不知道该怎么做。我知道长轮询的概念,即保持连接打开,直到事件发生。但是我如何在我的项目中实现这一点。如果您能给我一个简单的客户端长轮询示例以及我想的 View ,我将不胜感激。谢谢!
最佳答案
免责声明:这个答案早已过时。到 2020 年,这个问题有很多解决方案,django channels只是选择之一。
<< 免责声明
非常简单的例子:
import time
def long_polling_view(request):
for i in range(30): #e.g. reopen connection every 30 seconds
if something_happened():
...
return http.HttpResponse(
arbitrary_JSON_content,
mimetype='application/javascript'
)
time.sleep(1)
return http.HttpResponse({}, mimetype='application/javascript')
从客户端,您必须处理超时并重新打开连接。
但是,我应该说这通常是不好的方法,原因有很多:
在大多数情况下,每 3-5-10 秒检查一次 setTimeout() 中的响应就可以正常工作,并且在资源方面更有效。
但是还有比这更好的第三种选择。实际上,当没有其他事情可以获取实时更新时,长轮询更像是一种历史性的事情。 Websockets 更快、更便宜,现在 available in Django .
关于Django 和长轮询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22582417/