【发布时间】:2017-06-13 11:50:03
【问题描述】:
我在使用 Messenger 平台对我的应用进行压力测试时遇到了问题,无法在短时间内向多个用户发送相同的消息。我收到限制错误:(#613) Calls to this api have exceeded the rate limit.
目前我正在通过向同一个用户(我)多次发送相同的消息来测试这一点;在现实世界的场景中,当然会向多个不同的用户发送相同的消息。
另外,我正在使用实时应用的测试应用程序来执行这些测试。这应该在实时应用中得到显着改善吗?
我真的需要一个很好的吞吐量广播消息,所以目前我的设置有几个线程产生 (50) 并行发送消息,其中一些已经达到这个限制并出错。 另外,我尝试了 Batch Requests 来提高交付过程的速度,到那时真的变得难以忍受,成功率不到 50%。
我已阅读有关一般 Graph API 速率限制 (https://developers.facebook.com/docs/graph-api/advanced/rate-limiting) 的信息,并且要发送消息,您需要提供页面访问令牌,因此我希望我的应用属于“页面级速率限制”类别,如果我发送的消息太多。但是,在错误响应中没有 X-Page-Usage 标头(顺便说一下,X-App-Usage 也没有)。
在 Messenger 平台文档 (https://developers.facebook.com/docs/messenger-platform/send-api-reference#limits) 中声明如下:
Messenger 平台支持对 Send API 的高调用率。
但是,您应该构建您的系统,以便随着时间的推移分配任何突然的大量负载,并且在您达到我们的速率限制时能够控制您的吞吐量。
设置了速率限制以防止恶意行为和糟糕的用户体验。
请务必捕获发送 API 返回的任何错误,包括指示您已达到速率限制的错误。
这些也不是特别有用,因为它们没有明确引用通用 Graph API 限制,也没有指定允许执行的不同请求数量。
有什么我可能遗漏的吗?
【问题讨论】:
-
“您应该构建您的系统,以便随着时间的推移分配任何突然的大量负载,并且在您达到我们的速率限制时能够控制您的吞吐量” - 究竟是什么有问题吗?您意识到您正在达到极限,因为 API 正在返回此错误消息...所以是时候在您的应用程序中设置 $slowThisShitDown 标志了。
-
是的,但这仍然很模糊。我提到的标头完全到位,以便您的应用程序可以根据 Facebook 用来限制您的 Graph API 请求的滑动窗口的当前使用情况进行自我调整。因此,如果发送 API 不提供它,您将无法根据实际使用情况很好地分配工作负载。恐怕这个 API 没有使用相同的速率限制概念,但如果有一个“高调用率”以外的值就好了。
-
您可以随时提交文档错误,并要求他们澄清是否有不清楚或缺失的地方。我不确定 Send API 是否也应该发送这些响应标头,但我同意这只会有意义。所以我会问他们是否应该这样做,如果不是,文档至少应该明确提到这一点。 developers.facebook.com/bugs
-
是的,同时也是这样做的。我认为要么限制应该是公共的,要么应该根据 Graph API 的剩余端点提供标头。谢谢。
-
即使我已经每 3 分钟将机器人消息分发给 500 个用户,我也会遇到此错误。我每天早上都会向订阅用户发送一篇文章,但由于此限制,一些用户无法收到该文章。我也找不到一个特定的数字来满足这个限制(例如 10 个请求/秒)。这个简单的数字解释就可以了。
标签: facebook facebook-graph-api facebook-send-api