小编pjp*_*res的帖子

Messenger平台限制错误(#613)对此api的调用已超出速率限制

我无法使用Messenger平台对应用程序进行压力测试,以便在很短的时间内向多个用户发送相同的消息.我收到限制错误:(#613) Calls to this api have exceeded the rate limit.

目前我正在测试这个,通过多次向同一个用户发送相同的消息(我); 在现实世界的场景中,当然会将相同的消息发送给几个不同的用户.

此外,我正在使用实时应用程序的测试应用程序来执行这些测试.这应该在现场应用程序中大幅提升吗?

我真的需要一个很好的吞吐量广播消息,所以目前我的设置有几个线程spawn(50)并行发送消息,其中一些已达到此限制并出错.此外,我尝试了批量请求以提高交付流程的速度,此时它真的变得无法忍受,成功率低于50%.

我已经阅读了一般的图谱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 Platform支持对Send API的高速调用.

但是,您应该构建系统,以便随着时间的推移分配任何突然的大量负载,并且如果达到我们的速率限制,则能够控制吞吐量.

速率限制适用于防止恶意行为和糟糕的用户体验.

请务必捕获Send API返回的任何错误,包括指示您已达到速率限制的错误.

这些也不是特别有用,因为它们没有明确地引用一般的图谱API限制,也没有指定允许您执行的不同数量的请求.

有什么我可能会失踪的吗?

facebook facebook-graph-api facebook-send-api

7
推荐指数
1
解决办法
7040
查看次数

WorkManager 的 setRequiresDeviceIdle(true) 是如何工作的?

仅当设备未使用时我才需要运行特定的工作。但是,我不完全理解该.setRequiresDeviceIdle()约束是如何工作的。

\n

我正在这样安排一个工人:

\n
val constraints = Constraints.Builder()\n    .setRequiredNetworkType(NetworkType.CONNECTED)\n    .setRequiresBatteryNotLow(true)\n    .setRequiresStorageNotLow(true)\n    .setRequiresDeviceIdle(true)\n    .build()\n\nval networkWorkRequest = PeriodicWorkRequestBuilder<NetworkWorker>(15, TimeUnit.MINUTES)\n    .addTag(NetworkWorker.TAG)\n    .setInitialDelay(15, TimeUnit.SECONDS)\n    .setConstraints(constraints)\n    .build()\n\nWorkManager.getInstance(context)\n    .enqueueUniquePeriodicWork(NetworkWorker.TAG, ExistingPeriodicWorkPolicy.REPLACE, networkWorkRequest)\n
Run Code Online (Sandbox Code Playgroud)\n

请注意,设备已充满电、有足够的存储空间并且始终有可用的互联网连接(意味着满足前 3 个限制)。

\n

我尝试过几个小时不触摸设备,关闭所有应用程序,甚至通过 ADB(使用adb shell dumpsys deviceidle force-idle然后adb shell dumpsys deviceidle step)触发打瞌睡模式(然后是维护窗口),但似乎没有任何效果(根据文档,这个“空闲”不是与打瞌睡模式相同,但我决定尝试一下)。

\n

正如你所看到的,我已经将这项工作安排为定期的,只是为了检查它是否会产生任何影响(事实上,我只需要一名一次性工人)。我离开设备过夜,最终工作人员运行了(这些是我正在写入 SD 卡中的文件的一些日志):

\n
1620688536155,2021.05.11 00:15:36.155,DEBUG,PRETTY_LOGGER,Enqueueing worker with id 931d2b1f-85f4-445f-a889-832fdd945752\n1620712213970,2021.05.11 06:50:13.970,DEBUG,PRETTY_LOGGER,Running background work\xe2\x80\xa6 --- job started running\n1620712224898,2021.05.11 06:50:24.898,DEBUG,PRETTY_LOGGER,Response is: IT WORKS\n1620712224899,2021.05.11 06:50:24.899,DEBUG,PRETTY_LOGGER,Done! --- job finished\n
Run Code Online (Sandbox Code Playgroud)\n

如果我的作业至少在晚上运行一次,我就很好,因为它是为了触发更新过程,所以我确实需要设备在更新过程中处于空闲状态。无论如何,我想了解如何确保它能够运行,以及如何模仿它进行测试(例如,我们可以使用打瞌睡模式)。

\n

我在 …

android android-workmanager

7
推荐指数
0
解决办法
805
查看次数