0

我正在为通过Twitter Streaming API连接的机器人制定退避策略。API 文档指出:

对 TCP/IP 级别的网络错误进行线性回退。这些问题通常是暂时的,往往会很快解决。每次尝试将重新连接的延迟增加 250 毫秒,最多 16 秒。

我理解这个错误是由于——无论出于何种原因——客户端无法与服务器通信(即:没有 Internet 服务)。但是,我不确定是否应该将HTTP 状态代码等于或大于 500也视为TCP/IP 级别的网络错误(即:503 服务不可用),因为为了接收此错误代码,客户端之间的成功连接服务器应该已经发生了。

有人可以帮我理解这一点吗?

谢谢。

4

1 回答 1

1

由于这篇文章为我赢得了“风滚草”徽章 :-),我决定发布我在Twitter 开发人员收到的回复:

@kurrik

我认为您的直觉是正确的,因为 HTTP 状态代码不是 TCP/IP 错误,您应该使用指数退避。此类错误的较慢回退是为了使您的连接不受速率限制。5XX 错误有点不寻常,因为它表示在连接尝试被速率限制器记录之前或之后可能发生了错误。为了安全起见,我会说在这种情况下使用指数退避(尽管大多数 503 问题应该在第一次重新连接尝试后被清除)。

我最终使用了这个策略:

  • 断线和500错误:线性退避从0.25s开始,每次增加0.25s,最长16s。
  • 所有大于 500 的错误:从 5s 开始的指数退避,每次增加一倍,最多 5 分钟。
  • 速率限制(420 / 429):指数退避从 1m 开始,每次加倍。
  • 无重连: 所有 4XX 错误与速率限制错误不同。
于 2013-10-24T00:41:41.157 回答