假设一个操作可能需要在服务器上执行2到10分钟,例如更新索引,这是很耗时的。
您会在保持请求的同时执行操作吗?即在操作完成之前不发送HTTP响应?如果客户端/浏览器丢弃了请求,是否仍要继续操作?
另一种选择是什么?要启动运营,并以“长时间运营启动”作为回应?如果操作中途失败,客户端如何知道呢?维护服务器端操作的“状态”?
谢谢
发布于 2011-09-29 02:55:18
您也可以使用分块响应。首先,使用显示“请等待”屏幕的代码推送一个块,刷新响应并开始工作。然后,您可以使用定期进度更新来推送和刷新块,也可以只在最后推送一个带有“已完成”信息的块。显然,您可以使用JavaScript来获得良好的UI。
(如果您使用的是WSGI,那么上面的说明就不适用了,因为第一个WSGI规范的编写方式是使用未知长度的响应进行阻塞,因此不可能使用分块响应。)
发布于 2011-09-29 02:55:40
对于您知道需要很长时间(超过几秒钟)才能处理的请求,您必须至少假定连接可能被防火墙强制断开。
我会说你应该在后端实现一个队列系统。对perform操作的请求变成了对queue操作的请求。当操作实际完成时,您可以等待客户端轮询,或者以某种方式主动通知它们。对于浏览器,您几乎必须轮询或发送电子邮件。
发布于 2011-09-29 02:47:29
您会在保持请求的同时执行操作吗?即在操作完成之前不发送HTTP响应?
你的用户期望什么?
,如果客户端/浏览器丢弃了请求,是否仍要继续操作?
你的用户期望什么?
替代方案是什么?要启动运营,并以“长时间运营启动”作为回应?
你还能做什么呢?是否忽略该请求?假装什么都没发生?显然,你要通知他们。
如果操作中途失败,客户端如何知道?维护服务器端操作的“状态”?
那么有什么替代方案呢?魔法?直觉?显然,您必须保留状态。并显示状态。
阅读celery上的内容。
https://stackoverflow.com/questions/7587939
复制相似问题