问题标签 [exponential-backoff]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
10312 浏览

linear-programming - 使用指数退避有什么好处?

当代码在等待某个延迟时间不确定的条件时,看起来很多人选择使用指数退避,即等待N秒,检查条件是否满足;如果不是,请等待 2N 秒,检查条件等。与检查恒定/线性增加的时间跨度相比,这有什么好处?

0 投票
1 回答
739 浏览

javascript - Google JavaScript API:捕捉 HTTP 错误

AbrahamGoogle Calendar API 的回答:“后端错误”代码 503准确描述了我的情况。在循环创建或删除日历条目的代码时,我在随机位置得到 503。

但是,我不知道如何遵循他从谷歌引用的建议,即捕捉错误并使用指数回退重试交易。

下面的代码是一个循环,它将 8 个新事件放入我的日历中。它随机遇到 503 错误,这些错误是从 Google API 而不是我自己的代码抛出的。很多时候它工作没有错误。

Google API 代码从我的循环中异步运行,因此在我的循环完成之前,Google 的任何操作都不会真正执行。当异步代码抛出 503 时,我的代码周围的try-catch块不会触发。我不能在没有 a 的情况下将 acatch放入回调函数try中,这将缩小catch排除 Google 代码的范围。

有什么建议么?

0 投票
1 回答
1023 浏览

java - 为什么我们在重试请求之间应用延迟

当我们有一段代码经常失败并且必须重试时。然后我们使用重试模式。

在重试该请求之前,我们通常会延迟几毫秒。我想知道为什么我们需要一些延迟?如果重试请求没有等待并再次发送请求会发生什么。

0 投票
3 回答
4597 浏览

java - RxJava 中的指数退避

我有一个 API 可以Observable触发一个事件。

如果检测到 Internet 连接,我想返回一个Observable每秒发出一个值的值,如果没有连接则延迟时间。defaultDelaynumberOfFailedAttempts^2

我尝试了很多不同的风格,我遇到的最大问题是retryWhen's可观察的只评估一次:

有什么办法可以做我想做的事吗?我发现了一个相关的问题(现在找不到它正在搜索),但所采取的方法似乎不适用于动态值。

0 投票
0 回答
313 浏览

recursion - 使用递归函数和承诺的退避策略

几乎可以肯定我搞砸了我的承诺,但它就这样,在我的头爆炸之前

我正在尝试在使用 aws dynamodb 进行批处理操作后为我的 UnprocessedItems 实现重试机制。我有一组要写入数据库的批次。

以及实际保存数据的功能:

调用 Promise.all 后的结果数据应该是结果列表: data = [[r1], [r2], [r3], [r4]] 当 batchWrite 没有任何 UnprocessedItems 时,一切正常。但是当需要重试时,我会准确地为那些在第一次运行中有一些 UnprocessedItems 的批次获取空值:例如,如果批次 2 和 3 导致一些 UnprocessedItems 则 promise.all 以data = [[r1], null, null, [r4]]

我想我在使用递归时错误地处理了 Promise 调用,但我还想不通。

0 投票
3 回答
7879 浏览

java - RX Java - 重试一些引发异常的代码

我正在尝试使用 RX Java 来使用来自不断发送对象的源的一些数据。

我想知道如何针对我自己的代码引发异常的情况实施重试策略。例如,网络异常应触发具有指数退避策略的重试。

一些代码:

processMessage(message)是包含可能失败的风险代码的方法,它是我想要重试的代码部分,但我不想阻止可观察者使用源中的数据。

对此有什么想法吗?

0 投票
1 回答
1594 浏览

algorithm - 如何使用固定超时和尝试次数实现指数退避/延迟计算?

我见过的大多数退避/延迟算法都有固定的尝试次数或固定的超时,但不是两者兼而有之。

我想在 T 秒内准确地进行 M 次尝试,它们之间具有指数间隔,因此“T = delay(0) + delay(1) + ... + delay(M-1)”,其中“delay(N) = (e^N - 1) / e"(其中 N - 重试次数)。

如何计算上述描述中的“e”值,以便在整个超时 T 内进行准确的 M 次尝试(预先指定 M 和 T)?

0 投票
1 回答
3801 浏览

firebase - FCM:重试后和指数退避

据我了解,当消息无法传递时,Retry-After 标头有时包含在响应中,有时不包含。但是,如果我首先收到包含 Retry-After 的错误响应,然后重新发送消息并收到另一个错误响应但没有 Retry-After,会发生什么?我知道我应该使用指数退避,但是当之前的等待时间来自 Retry-After 标头时,它是如何工作的?

想象一下这个请求和响应序列:

在发送请求 4 之前我应该​​等待多长时间?8 秒?还是从 2 秒开始?

0 投票
2 回答
1680 浏览

java - 如何为 Google Gmail API 实现指数退避?

我目前正在使用 Gmail API 代表用户发送电子邮件。邮件是一一发送的,收件人的平均大小是 500。我经常看到{ "code" : 500, "errors" : [ { "domain" : "global", "message" : "Backend Error", "reason" : "backendError" } ], "message" : "Backend Error" }

以及一些发生的

{ "code" : 429, "errors" : [ { "domain" : "usageLimits", "message" : "Rate Limit Exceeded", "reason" : "rateLimitExceeded" } ], "message" : "Rate Limit Exceeded" }

谷歌建议实施指数退避策略来解决这些错误。我已经实现了下面的解决方案,但它似乎不起作用并且对这些错误没有帮助。这是我的实现;

这个实现有什么问题?我是否正确实现了自定义 HttpRequestInitializer。 我可以在哪里设置日志语句以了解是否根据指数策略重试请求?

请建议

0 投票
2 回答
1453 浏览

python - python中的指数退避实现

我有两个列表“开始”和“结束”。它们的长度相同(每个 400 万):

我的问题是我想迭代这两个列表,从同一点开始,但是沿着“结束列表”逐步迭代,直到找到一个值,其中“开始 [i]”和“结束 [i+x”之间的差异]' 大于 1000。

在此处输入图像描述

我已尽最大努力做到这一点,我使用无限循环迭代“结束列表”,直到与 start 的差异超过 1000,然后从该点开始并从那里执行相同的操作......

注意:旧内容省略

最终我正在寻找的输出是(以上面的说明图为例):

谁能帮我这个?

更新

虽然这个问题的先前答案确实有效:

恐怕代码非常慢,因为我正在更新“i_e”的扩展名,方法是在内部 while 循环的每次迭代中添加 1...为了解决这个问题,我想创建一个将扩展的“计数器”变量'i_e' 变量动态。这将通过递归来完成,其中 i_e 变量将呈指数增加,直到达到所需距离的一半,然后将呈指数减少,直到达到所需距离。

战略说明

在此处输入图像描述

我的尝试如下:

我创建了一个递归函数来更新变量“计数器”

在原始代码中调用函数:

我收到以下错误:

(印刷数千次)

我对这种问题没有经验,并且不确定我是否正确地接近它......有人可以帮忙吗?