gpt4 book ai didi

python - 在 RESTful Web 服务中,服务器需要很长时间才能响应是否可以接受?

转载 作者:太空宇宙 更新时间:2023-11-04 08:02:54 25 4
gpt4 key购买 nike

我正在使用 flask-restful 开发 RESTful 网络服务。

客户端需要能够请求服务器执行的作业。这项工作可能需要大约 1 秒到大约 1 小时的时间来执行。一般预计需要1-5分钟。

作业完成后,客户端需要下载 JSON 转储。大小从 100KB 到 100MB 不等。

我看到 2 个选项:

  1. 客户端以 POST 请求的形式提交作业,只有在作业完成时才会收到来自服务器的响应。响应包括 JSON 转储。
  2. 客户端将作业作为 POST 请求提交,服务器立即响应 200 OK。然后客户端每隔 60 秒提交一次 GET 状态请求。作业完成后,它会提交另一个 GET 请求以下载 JSON 转储。

在 REST 原则下哪个选项是首选?

我看到选项 1 的问题是在等待响应时网络中断的可能性。

最佳答案

等待超过几秒钟是绝对不能的。

大多数 Web 基础设施并不是为处理如此长的延迟而设计的,一些代理/负载平衡器可能会超时 - 即使您的服务器最终产生了响应,也没有人会在那里阅读它。此外,用户会感到无聊并开始刷新/取消/等等。

正如@jonrsharpe 在评论中提到的,您的服务器应尽快响应有关正在发生的事情的信息。输入 202 Accepted 状态码:

The request has been accepted for processing, but the processing has not been completed. The request might or might not eventually be acted upon, as it might be disallowed when processing actually takes place. There is no facility for re-sending a status code from an asynchronous operation such as this.

(摘自 restapitutorial)

所以用 202 和一个句柄来响应结果应该在什么地方——无论是在正文中还是在响应头中。然后客户端可以轮询给定位置以查看作业状态并下载结果。

如果结果很大,允许对结果进行HEAD请求也是合理的,这样用户可以轮询HEAD来检查结果是否可用,然后使用 GET 下载它们,而不会在轮询期间突然被淹没。

关于python - 在 RESTful Web 服务中,服务器需要很长时间才能响应是否可以接受?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36888095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com