2017-09-21 2 views
0

Ich arbeite an einem Projekt, bei dem der Benutzer Tabs öffnet, die jeweils mit einem PubNub-Kanal verbunden sind und auf Ereignisse warten. Diese geöffneten Registerkarten werden dann in einer Verwaltungsregisterkarte angezeigt, sodass der Benutzer alle Registerkarten sehen kann, die verbunden sind. Momentan verwenden wir ihre Präsenz, um zu sehen, wer verbunden ist, was auch Nachrichten auslöst, die Nachrichten über den Beitritt, das Verlassen und das Zeitlimit anzeigen.Kann ein Web-Arbeiter oder etwas Ähnliches Ereignisse im Fenster schließen?

Das Problem kommt auf, wenn der Benutzer einfach eine Registerkarte schließt, kann ich keine Abmeldungsnachricht an den Kanal auslösen, und ich muss warten, bis PubNub ein Timeout für diese Verbindung aufruft, um es aus der Registerkarte Verwaltung zu entfernen . Ich habe ihre Heartbeat-Option optimiert, um viel kürzer zu sein, aber es wäre wirklich schön, wenn die Verbindungen später geschlossen würden, wäre das viel schneller.

Mein Gedanke war vielleicht ein Web Worker oder etwas Ähnliches, das vielleicht erstellt werden kann, um einfach eine Abmeldungsnachricht zu senden, aber es scheint, dass möglicherweise nicht möglich ist, von dem, was ich verstehe, wird der Web-Worker unbrauchbar, wenn die übergeordnete Seite dass es hervorgebracht hat, wird es geschlossen?

Gibt es eine Möglichkeit, so etwas zu tun, oder ist es das Beste, das Zeitlimit wirksam werden zu lassen und den Manager-Tab zu bearbeiten, der nur wartet, bis das Timeout aufgerufen wird?

+1

Der WebWorker könnte eine Option sein, ist aber stark vom Browser abhängig. Und wenn Sie sich keine Sorgen um Browser-Abhängigkeiten machen, können Sie sich einfach auf die Unterstützung des Browsers für sendBeacon verlassen oder auf ein Ereignis, um das Abonnement abzubestellen. Sie können jedoch auch TCP_FIN in Ihrem Presence-Add-On für Ihre PubNub-Schlüssel aktivieren, die ein Leave-Ereignis senden, wenn die Registerkarte entladen wird. Vorsichtig, da dies zu Leistungsproblemen bei der Seite führen kann, wenn Sie viele Kanäle abonniert haben. Bitte lassen Sie mich wissen, ob dies hilfreich ist und Sie weitere Fragen haben. –

+0

@CraigConover Das ist unglaublich! Ich wusste nicht, dass das so ist! Vielen Dank! – Jordan

+0

Nicht sicher, was ich getan habe, aber - schön! Freut mich, dass es dich glücklich gemacht hat;) Füge meinen Kommentar als offizielle Antwort hinzu. –

Antwort

0

PubNub und Browser-Fenster/Tab Schließen Events

Die WebWorker könnte eine Option sein, aber es ist sehr Browser abhängig. Und wenn Sie sich keine Sorgen um Browser-Abhängigkeiten machen, können Sie sich einfach auf die Unterstützung des Browsers für sendBeacon verlassen oder auf ein Ereignis, um das Abonnement abzubestellen.

Sie können aber auch TCP_FIN auf Ihrem Presence-Add-On für Ihre PubNub-Schlüssel aktivieren, die ein Leave-Ereignis senden, wenn die Registerkarte entladen wird. Seien Sie vorsichtig, da dies zu Leistungsproblemen beim Seitenentladen führen kann, wenn Sie viele Kanäle abonniert haben, da es sich um einen blockierenden Anruf handelt.

Verwandte Themen