FCM的使用率限制-2500?还是400?用于管理SDK



阅读我发现的文档:

XMPP服务器节流我们将您连接到FCM XMPP服务器的速率限制为每个项目每分钟400个连接。这对消息传递来说不应该是一个问题,但对确保系统的稳定性很重要。对于每个项目,FCM允许2500个并行连接

https://firebase.google.com/docs/cloud-messaging/concept-options#xmpp_throttling

该页面中还描述了连接到FCM发送消息的不同方式。HTML和XMPP是不同的机制,所以我假设管理员SDK(在我的例子中是Golang(在后台使用HTTP而不是XMPP,所以如果这不是真的,请纠正我。

如果管理SDK使用HTTP,则意味着只能有2500个同时连接。

我正在制作一个可扩展的应用程序,用户基本上可以定义自己的通知(和消息(时间表,服务器会检索它,每隔30秒左右运行一次定时器循环,以查看谁需要发送他们的消息。

出于所有意图和目的,每个通知都是不同的。然而,绝大多数通知都会准时送达。这意味着我的服务器将不得不在一小时内的X:00分钟内发送可能成千上万的通知。重要的是这些通知要准时送达(即,我不能在一小时内把它们全部隔开(。

在我的情况下,使用像主题这样的变通方法是行不通的,因为每个人都是个体的。

我只是在考虑如何应对这些限制(并确保我理解它们(。如果FCM允许通过Go中的管理SDK并行2500个连接,我可以进行2500个异步连接,等待它们全部完成,然后再进行2500个,冲洗并重复吗?这样,如果我有25000个订阅用户,每个用户需要1秒,理论上我可以在10秒内发送所有通知,这是可以接受的。

我是否需要了解其他利率限制?

谢谢!

我假设管理员SDK(在我的例子中是Golang(在后台使用HTTP

这是正确的。管理SDK使用版本化的HTTP API来调用FCM。

扩展FCM使用率的关键是有效地使用资源。例如,在版本化的API(管理SDK在后台使用(中,您可以通过单个HTTP连接传递多达500个请求,这意味着您可以通过多次调用分摊建立连接的成本。

您可以在关于向多个设备发送消息的文档中的REST示例中找到实际HTTP调用的示例:

--subrequest_boundary
Content-Type: application/http
Content-Transfer-Encoding: binary
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
POST /v1/projects/myproject-b5ae1/messages:send
Content-Type: application/json
accept: application/json
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"title":"FCM Message",
"body":"This is an FCM notification message!"
}
}
}
...
--subrequest_boundary
Content-Type: application/http
Content-Transfer-Encoding: binary
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
POST /v1/projects/myproject-b5ae1/messages:send
Content-Type: application/json
accept: application/json
{
"message":{
"token":"cR1rjyj4_Kc:APA91bGusqbypSuMdsh7jSNrW4nzsM...",
"notification":{
"title":"FCM Message",
"body":"This is an FCM notification message!"
}
}
}
--subrequest_boundary--

在Go Admin SDK中,这相当于调用sendAll,即:

func (c Client) SendAll(ctx context.Context, messages []*Message) (*BatchResponse, error)

SendAll通过Firebase Cloud Messaging发送给定阵列中的消息。

消息数组最多可包含500条消息。SendAll使用批处理将整个[messages]数组作为单个RPC调用发送。与Send()功能相比,这是一种发送多条消息的高效方式。从返回值获得的响应列表对应于输入消息的顺序。来自SendAll的错误表示完全失败,即阵列中的任何消息都无法发送。部分故障由BatchResponse返回值指示。

相关内容

  • 没有找到相关文章

最新更新