почему FCM перестает отправлять сообщения моему XMPP-клиенту? - PullRequest
0 голосов
/ 08 июля 2019

я использую 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 stopотправка мне сообщений через 10 минут, единственный разговор между FCM и моим клиентом после этого времени - это периодический пинг

...