У меня есть клиент XMPP, и я никогда не получал сообщение CONNECTION_DRAINING, так что у меня есть этот вопрос, , как часто именно CCS необходимо закрыть соединение для выполнения балансировки нагрузки?Как часто 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, чтобы указать, что соединение находится в состоянии , и оно будет закрыто в ближайшее время. «Слив» относится к отключению потока сообщений , поступающих в соединение, но разрешающего все, что уже есть, , чтобы продолжить. Когда вы получите сообщение CONNECTION_DRAINING, вы должны немедленно приступить к отправке сообщений другому соединению CCS, открыв новое соединение, если необходимо . Однако вы должны сохранить исходное соединение открытым и продолжать получать сообщения, которые могут возникнуть по соединению (и ACKing them) -CCS обрабатывает инициирование соединения, закрывая его, когда он готов.
CONNECTION_DRAINING сообщение выглядит следующим образом:
<message>
<data:gcm xmlns:data="google:mobile:data">
{
"message_type":"control"
"control_type":"CONNECTION_DRAINING"
}
</data:gcm>
</message>