Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 当客户端为多线程时,客户端对HTTP 429的正确反应是什么?_Multithreading_Http_Rate Limiting_Http Status Code 429 - Fatal编程技术网

Multithreading 当客户端为多线程时,客户端对HTTP 429的正确反应是什么?

Multithreading 当客户端为多线程时,客户端对HTTP 429的正确反应是什么?,multithreading,http,rate-limiting,http-status-code-429,Multithreading,Http,Rate Limiting,Http Status Code 429,HTTP状态代码429告诉发出请求的客户机退出,并在响应的retry after标头中指定的时间段后重试请求 在单线程客户机中,很明显,获取429的线程应该按照指示等待,然后重试。但报告明确指出 此规范未定义源服务器如何识别 用户,也不知道它如何计算请求 因此,在多线程客户端中,保守的方法将停止所有线程发送请求,直到在时间点之后重试。但是: 许多线程可能已经过了可以记录来自一个被拒绝线程的信息并至少发送一个请求的时间点 线程之间的全局同步可能是一个难以实现和正确实现的难题 如果安装程序不仅运行

HTTP状态代码429告诉发出请求的客户机退出,并在响应的retry after标头中指定的时间段后重试请求

在单线程客户机中,很明显,获取429的线程应该按照指示等待,然后重试。但报告明确指出

此规范未定义源服务器如何识别 用户,也不知道它如何计算请求

因此,在多线程客户端中,保守的方法将停止所有线程发送请求,直到在时间点之后重试。但是:

  • 许多线程可能已经过了可以记录来自一个被拒绝线程的信息并至少发送一个请求的时间点
  • 线程之间的全局同步可能是一个难以实现和正确实现的难题
  • 如果安装程序不仅运行多个线程,而且运行多个客户机(可能在不同的机器上),那么在一台429上备份所有线程将变得非常重要
是否有人从该领域获得了具体数据?云提供商的服务器实际上是如何处理这些数据的?如果我不在全局范围内保留所有线程,它们会立即恶化吗。是

  • 等待“重试时间”字段中指定的秒数
  • 请重试该请求
  • 如果请求再次失败,并出现429错误代码,则仍将限制您的请求。延迟后继续使用建议的重试,并重试请求,直到成功
  • 它两次说“请求”不是“任何请求”或“所有请求”,但这是我不相信的法律类型的解释

    为了确保这不是一个意见问题,让我尽可能以事实为基础来表述:


    是否有更详细的云API规范(Microsoft、Google、Facebook、Twitter)然后,上面的示例允许我做出一个明智的决定:是否需要全局回退,或者是否足以回退429?

    服务器收到的特定请求,这意味着需要同步或希望程序员这样做。所以,除非他们在429年后收到了一大堆根本不退却的请求,否则他们怀疑是否会受到处罚

    每个线程都应该等待,但在分别被告知之后,每个线程都会等待

    一个好的系统应该知道它的速率是多少,并且在这个速率之内。实现这一点的一种方法是在请求之间使用sleepFor变量。精确的prod值可以通过反复试验得出,即睡眠时间减去先前的请求时间

    因此,如果一个请求结束,并说它花了x毫秒。现在如果睡眠时间是 0或更少,立即移动到下一个请求 如果大于等于1,则查找sleepTime-x,如果小于1,则立即转到下一个,否则将睡眠这么多毫秒,然后转到下一个请求

    另一种方法是每5分钟左右进行一次计数,然后如果线程的实际请求可能超过这个值,那么它将休眠到5分钟,然后再移动到下一个。这里5可以配置为时间段

    我们要做的是将这些值保存在数据库中,但在运行时缓存它们。还有一个页面可以使缓存失效,因此如果我们愿意,我们可以从管理页面更新数据库,然后使缓存失效,这样客户端就可以在运行时获取新信息。这有助于配置正确的值,使其保持在API限制内,并完成足够的作业。

    One hit:表示:“所有请求都将返回这些错误响应,直到API请求量降至限制以下。”可能被解释为不需要全局回退,因为每个请求都会得到回退回答。