【问题标题】:Do we need complex sending strategies for GCM / FCM?我们需要复杂的 GCM / FCM 发送策略吗?
【发布时间】:2017-05-23 16:48:01
【问题描述】:

目前,我正在开发一个支持多个租户的 SaaS,可以为他们的用户群启用推送通知。 我正在考虑使用消息队列来存储所有推送并使用单独的服务发送它们。该新服务需要从队列中读取并发送推送通知。

我现在的问题是:我需要想出一个复杂的发送策略吗?我知道 GCM 的每个请求限制为 1000 个设备,因此需要考虑这一点。我也等不及 x 推送飞入,因为这可能会延迟先前推送的发送。我的下一个想法是创建一个全局数组并用队列中的推送填充它。然后,一个循环将每隔 1 秒获取一次该数组并发送推送。这样推送肯定会被发送,并且不会超过 1000 台设备的限制。

所以......虽然这可能有效,但我不确定无限循环是否是最好的方法。我想知道 GCM / FCM 是否有请求限制?如果没有,我不需要首先聚合推送,我可以放弃循环。我可以简单地为从队列中拉出的每个推送触发一个请求。

对这个主题的任何启示或对我的原型算法的改进都会很棒!

【问题讨论】:

    标签: algorithm google-cloud-messaging message-queue firebase-cloud-messaging


    【解决方案1】:

    我需要想出一个复杂的发送策略吗?

    不是真的。 GCM/FCM 非常简单。只需将消息发送到 GCM/FCM 服务器,它就会自行排队,然后(根据其行为)尽快发送。

    我知道 GCM 的每个请求限制为 1000 台设备,因此需要考虑这一点。

    我认为您对每次请求 1000 台设备的限制感到困惑。 1000 台设备限制是指您在使用registration_ids 参数时在列表中添加的注册令牌数:

    此参数指定接收多播消息的设备列表(注册令牌或 ID)。它必须包含至少 1 个且最多 1000 个注册令牌

    这意味着您只能在单个请求中向 1000 个具有相同消息负载的设备发送(如果需要,您可以执行批量请求(每个请求 1000 个))。

    我想知道 GCM / FCM 是否有请求限制?

    AFAIK,没有这样的限制。放弃循环。每当您成功向 GCM/FCM 服务器发送消息时,它都会排队并保留该消息,直到它可以发送为止。

    【讨论】:

    • 我的意思是每条消息的注册令牌限制!但是知道不存在请求限制是很棒的。我认为在发送推送时防止 DOS 像轰炸一样有一些限制,因此我强制聚合......
    • @codepushr 之前提到过Throttling。但那是一种方式,方式,waaay back,并且不再在官方文档中提及。所以我认为它已经被废弃了。干杯!
    猜你喜欢
    • 2012-06-17
    • 1970-01-01
    • 2016-09-15
    • 2011-01-14
    • 1970-01-01
    • 2023-02-04
    • 2021-07-03
    • 1970-01-01
    相关资源
    最近更新 更多