Ich möchte die Server-Sent-Ereignisse programmatisch schließen, sobald ein Benutzer abmeldet. Allerdings, wenn der Benutzer sich anmeldet zurück, wird der Browser keine https-Anfragen mehr ausführen, da sie ihre Grenze von SSE-Verbindungen erreicht hat.Server-Sent Event-Verbindungen werden nicht trotz Aufruf `schließen geschlossen()`
Ich verwende EventSource
für Veranstaltungen zu hören.
Dies ist, wie ich meine Verbindungen schließen:
var eventSource;
function onChange(accountId:string, callback){
var url = "...";
eventSource = new EventSource(url);
if(eventSource){
eventSource.addEventListener("put", callback);
}
}
function close(){
this.eventSource.close()
}
Als ich im Browser die Netzwerkverbindungen zu beobachten, erkannte ich die Verbindung noch besteht. Der Ausgang in Timing
ist: Caution: request is not finished yet!
die folgenden Ereignis-Ströme werden abgewürgt aufgrund der begrenzten Anzahl von Verbindungen.
Ich bin mir nicht sicher, ob EventSource
entworfen wird, um so zu verhalten, aber ich konnte nichts in Bezug auf dieses Problem finden, da viele Leute nicht das gleiche Szenario haben.
Jedes Mal, wenn ich die Seite in meinem Browser neu lade (chrome), sind alle bestehenden Verbindungen geschlossen, aber ich möchte die Seite nicht neu laden, um dieses Problem zu umgehen.
Ich stellte sicher, dass 'this 'sich auf den richtigen Bereich bezog und die' eventSource' auf 'undefined' stellte, nachdem sie geschlossen wurde, aber die Verbindung besteht immer noch. Übrigens benutze ich Typoskript (ionic3) und installiert 'eventSource' mit npm, kann es einen Effekt haben? –
@MerveSahin Da Sie die ersten beiden scheinbar eliminiert haben (obwohl ich das 'This. 'trotzdem entfernen würde, da es hier optional ist und so leicht schief gehen kann), haben Sie versucht, das Objekt in' es' umzubenennen? Ich bin nicht genug vertraut mit ionic3 zu kommentieren; wenn du mit npm installierst, meinst du das auf dem back-end oder dem front-end? Wenn es ein Wrapper um die integrierte EventSource des Browsers ist, dann könnte das das Problem sein? –