我有一个客户端 XMPP,但我从未收到过 CONNECTION_DRAINING 消息,所以我有这个问题,CCS 需要多久关闭一次连接才能执行负载平衡?
这是我验证是否收到 CONNECTION_DRAINING 消息的代码的一部分
............................... more code
def message_callback(session, message):
global unacked_messages_quota
gcmData = message.getTags('data:gcm')
if gcmData:
print "alert, the connection is being drained and will be closed soon !!!!!!!!!!!!!"
gcm = message.getTags('gcm')
if gcm:
gcm_json = gcm[0].getData()
msg = json.loads(gcm_json)
if not msg.has_key('message_type'):
# Acknowledge the incoming message immediately.
send({'to': msg['from'],
'message_type': 'ack',
'message_id': msg['message_id']})
.......................................................... more code
我已阅读来自https://developers.google.com/cloud-messaging/ccs的文档
特别是这部分
CCS 需要定期关闭连接以执行负载平衡。在关闭连接之前,CCS 会发送一个 CONNECTION_DRAINING 消息,表示连接正在耗尽,即将关闭。“Draining”是指关闭进入连接的消息流,但允许管道中已经存在的任何内容继续。当您收到 CONNECTION_DRAINING 消息时,您应该立即开始向另一个 CCS 连接发送消息,必要时打开一个新连接。但是,您应该保持原始连接打开并继续接收可能来自连接的消息(并确认它们) - CCS 会在连接准备好时处理启动连接关闭。
CONNECTION_DRAINING 消息如下所示:
<message>
<data:gcm xmlns:data="google:mobile:data">
{
"message_type":"control"
"control_type":"CONNECTION_DRAINING"
}
</data:gcm>
</message>