Nous construisons un salon de discussion avec notre propre système de notification sans dépendre de GCM mais avec service worker + SSE. Sur le bureau, c'est bien, mais sur mobile application Android (qui utilise cordova-crosswalk, chrome 53). La connexion de notification longue durée est bloquée après 20-30 minutes et se trouve dans l'activité de premier plan. Il ne meurt pas avec une erreur, mais il ne reçoit pas de données. Aucune erreur du tout ce qui est très bizarre. Pas moyen de se reconnecter puisque nous ne savons pas si la connexion est morte du tout.Chrome sur Android: connexion devenue morte après 30 minutes
Quelle serait la manière la plus propre? Redémarrer la connexion toutes les 5 minutes est une idée mais elle n'est pas propre. Code
runEvtSource(url, fn) {
if (this.get('session.content.isAuthenticated') === true) {
var evtSource = new EventSource(url, {
withCredentials: true
});
}}
Agressive Reconnect Code
var evtSource = this.runEvtSource(url, fn)
var evtSourceErrorHandler = (event) => {
var txt;
switch (event.target.readyState) {
case EventSource.CONNECTING:
txt = 'Reconnecting...';
evtSource.onerror = evtSourceErrorHandler;
break;
case EventSource.CLOSED:
txt = 'Reinitializing...';
evtSource = this.runEvtSource(url, fn)
evtSource.onerror = evtSourceErrorHandler;
break;
}
console.log(txt);
evtSource.onerror = evtSourceErrorHandler
Avez-vous essayé périodiquement (moins que le délai d'expiration auquel vous semblez) envoyer des données pour maintenir la connexion active? – gzost
non je n'ai pas essayé cela, cela signifie l'envoi de fausses données? –
Pas vraiment des données "fausses", mais des données qui ont pour seul but de maintenir la connexion en vie (souvent appelée ping/pong). – gzost