首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当服务器执行耗时的操作时,您是否应该保留HTTP请求?还是放手让请求过去?

当服务器执行耗时的操作时,您是否应该保留HTTP请求?还是放手让请求过去?
EN

Stack Overflow用户
提问于 2011-09-29 02:42:35
回答 3查看 457关注 0票数 1

假设一个操作可能需要在服务器上执行2到10分钟,例如更新索引,这是很耗时的。

您会在保持请求的同时执行操作吗?即在操作完成之前不发送HTTP响应?如果客户端/浏览器丢弃了请求,是否仍要继续操作?

另一种选择是什么?要启动运营,并以“长时间运营启动”作为回应?如果操作中途失败,客户端如何知道呢?维护服务器端操作的“状态”?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-29 02:55:18

您也可以使用分块响应。首先,使用显示“请等待”屏幕的代码推送一个块,刷新响应并开始工作。然后,您可以使用定期进度更新来推送和刷新块,也可以只在最后推送一个带有“已完成”信息的块。显然,您可以使用JavaScript来获得良好的UI。

(如果您使用的是WSGI,那么上面的说明就不适用了,因为第一个WSGI规范的编写方式是使用未知长度的响应进行阻塞,因此不可能使用分块响应。)

票数 3
EN

Stack Overflow用户

发布于 2011-09-29 02:55:40

对于您知道需要很长时间(超过几秒钟)才能处理的请求,您必须至少假定连接可能被防火墙强制断开。

我会说你应该在后端实现一个队列系统。对perform操作的请求变成了对queue操作的请求。当操作实际完成时,您可以等待客户端轮询,或者以某种方式主动通知它们。对于浏览器,您几乎必须轮询或发送电子邮件。

票数 2
EN

Stack Overflow用户

发布于 2011-09-29 02:47:29

您会在保持请求的同时执行操作吗?即在操作完成之前不发送HTTP响应?

你的用户期望什么?

,如果客户端/浏览器丢弃了请求,是否仍要继续操作?

你的用户期望什么?

替代方案是什么?要启动运营,并以“长时间运营启动”作为回应?

你还能做什么呢?是否忽略该请求?假装什么都没发生?显然,你要通知他们。

如果操作中途失败,客户端如何知道?维护服务器端操作的“状态”?

那么有什么替代方案呢?魔法?直觉?显然,您必须保留状态。并显示状态。

阅读celery上的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7587939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档