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