nit*_*wit 5 apache django wsgi http
我有一个Django视图,该视图执行了一些非常繁重的处理,并且大约需要20-30秒才能返回结果。
有时,用户最终会在请求完成之前关闭浏览器窗口(终止连接),在这种情况下,我希望能够检测到这一点并停止工作。我所做的工作在数据库上是只读的,因此事务没有任何问题。
在PHP中,connection_aborted函数正是这样做的。Django提供此功能吗?
这是我要编写的示例代码:
def myview(request):
while not connection_aborted():
# do another bit of work...
if work_complete:
return HttpResponse('results go here')
Run Code Online (Sandbox Code Playgroud)
谢谢。
PHP 中的该connection_aborted方法并不执行您想象的操作。它会告诉您客户端是否已断开连接,但前提是缓冲区已被刷新,即某种响应从服务器发送回客户端。PHP 版本甚至无法像上面所写的那样工作。您必须flush在循环中添加对类似内容的调用,以使服务器尝试发送数据。
HTTP 是一种无状态协议。它的设计目的是让客户端或服务器不相互依赖。因此,只有在创建连接时才知道其中任何一个的状态,并且只有当有一些数据要以某种方式发送时才会发生这种情况。
您最好的选择是按照 @MattH 的建议进行操作,并通过一些 AJAX 来完成此操作,如果您愿意,您可以集成 Node.js 之类的东西来使客户端在处理过程中“签入”。不过,如何正确设置它超出了我的专业范围。
| 归档时间: |
|
| 查看次数: |
1408 次 |
| 最近记录: |