Почему FCM перестает отправлять сообщения на мой XMPP-клиент?
Я использую sleekxmpp, и мой xmpp клиент работает хорошо в течение 10 минут, но после этого FCM перестает отправлять мне сообщения, соединение все еще открыто, но мой клиент не получает больше сообщений от FCM
так почему же это случилось??
Я отправляю перидически пинг для поддержания связи https://xmpp.org/extensions/xep-0199.html и я тоже пытался периодически отправлять пробелы, но всегда через 10 минут FCM не отправляет мне сообщения
send_queue = deque()
class Client_xmpp:
def __init__(self):
self.SASL_DOMAIN = 'fcm.googleapis.com'
self.FCM_ENDPOINT = 'fcm-xmpp.googleapis.com'
self.PORT = 5235
self.PROJECT_ID = "secret"
self.API_KEY = "secret"
self.client = GCM(self.PROJECT_ID+'@'+self.SASL_DOMAIN, self.API_KEY)
self.unacked_messages_quota = 100
def onAcknowledge(self,error, message_id, _from):
some code ////////////////////////
def onDisconnect(self,draining):
print 'inside onDisconnect'
self.client.connect((self.FCM_ENDPOINT , self.PORT ), use_ssl=True)
def onMessage(self,msg):
some code ///////////////////////////
def start(self):
self.client.register_plugin('xep_0199', {'keepalive': True, 'interval': 10, 'timeout': 30})
self.client.add_event_handler(XMPPEvent.DISCONNECTED,self.onDisconnect)
self.client.add_event_handler(XMPPEvent.MESSAGE, self.onMessage, threaded=True)
auth = self.client.connect((self.FCM_ENDPOINT , self.PORT ), use_ssl=True)
if not auth:
print 'Authentication failed!'
sys.exit(1)
self.client.process(block=False)
while True:
time.sleep(1)
self.flush_queued_messages()
def unique_id(self,msg_from):
return str(datetime.utcnow())+msg_from
@property
def unacked_messages(self):
return self.unacked_messages_quota
@unacked_messages.setter
def unacked_messages(self, value):
self.unacked_messages_quota = value
def flush_queued_messages(self):
while len(send_queue) and self.unacked_messages > 0 :
self.client.send_gcm(send_queue.popleft(),self.onAcknowledge)
self.unacked_messages -= 1
if __name__ == '__main__':
try:
client = Client_xmpp()
client.start()
except Exception as e:
print "Unexpected error:", sys.exc_info()
traceback.print_exc()
FCM прекратит посылать мне сообщения через 10 минут, единственный разговор между FCM и моим клиентом после этого времени - это периодический пинг