我需要在我的应用程序中实现长轮询以检索事件。但我不知道该怎么做。我知道长轮询的概念,即保持连接打开,直到事件发生。但是我该如何在我的项目中实现这一点。如果你能给我一个简单的长轮询客户端示例和我想的观点,我真的很感激。谢谢!
答案 0 :(得分:2)
非常简单的例子:
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。