我正在开发一个应用程序服务器来发送GCM消息。我的应用程序服务器使用HTTP协议向GCM连接服务器发送post请求。请求的平均响应时间是可接受的(大约100毫秒),但有时我得到的响应时间大于1秒。偶尔我会得到一些2,4秒甚至更长的响应时间。 我正在使用此库gcm-server将我的请求发送到GCM服务器。我相信它归谷歌所有。 为了解决这个问题,我在gcm-server库代码中进行了一些分析,但是找不到任何线索或答案。最终,我决定向GCM服务器发送一些带有效帖子的curl。结果是一样的。我敢肯定这不是预期的行为,也许我做错了什么,但找不到或不明白它是什么。
下面是我正在运行的脚本来测试它。我向GCM发送了1000个帖子请求,没有Keep-Alive的任何定义(默认情况下,cURL使用Keep-Alive)。
#!/bin/bash
for i in {1..1000}; do
curl -s -w "%{http_code} - %{time_total}\n" -o /dev/null -X POST -H "Content-Type: application/json" -H "Authorization: key={putHereOneGCMValidToken}}" -H "Cache-Control: no-cache" -d '{
"collapse_key": "92667ba1-c8e9-4018-bf14-156417065641",
"delay_while_idle": false,
"data": {
"field1": "value1",
"field2": "value2"
},
"time_to_live": 0,
"registration_ids": [
"REGISTRATION_ID_1",
"REGISTRATION_ID_2",
"BAD_REGISTRATION_ID"
]
}' "https://gcm-http.googleapis.com/gcm/send";
sleep 0.2;
done
参考:
答案 0 :(得分:0)
您正在使用过多的下游消息对您的服务器进行排队。尝试使用较低的测试号码发送。如果您正在测试或发送给多个设备或用户,请尝试Device Group Messaging或Send Messages to Topics。
设备组消息传递
- 通过设备组消息传递,应用服务器可以将单个消息发送到在属于某个组的设备上运行的应用的多个实例。
向主题发送消息
- GCM主题消息传递允许您的应用服务器向已选择加入特定主题的多个设备发送消息。
此外,您必须考虑间歇性互联网连接等外部因素,以延迟接收消息。最后,您可能需要检查在发送GCM后遇到High Server CPU的相关SO question。
希望这有帮助!