DEV Community

Cover image for Aktivieren und Konfigurieren der PubNub-Präsenz

Aktivieren und Konfigurieren der PubNub-Präsenz

Wie können Sie erkennen, wann ein Benutzer online oder offline geht, oder wie wissen Sie, ob ein Client-Gerät verbunden ist und wann es die Verbindung trennt? Mit PubNub Presence können Sie in Echtzeit verfolgen, wer mit Ihren Kanälen verbunden ist, und Sie werden benachrichtigt, wenn sich der Verbindungsstatus ändert.

Embedded YouTube Video

Sehen Sie sich das Video an

Das Presence-System ist sehr flexibel und ermöglicht unter anderem folgende Anwendungsfälle:

  • Überwachen, wann Benutzer einer Chat-Konversation beitreten oder sie verlassen
  • Erkennen, wann ein Benutzer online oder offline ist
  • Feststellen, ob ein IoT-Gerät verbunden und verfügbar ist
  • Zählen, wie viele Clients mit einem Kanal verbunden sind (Kanalbelegungszählung)

Sie können auch einige Statusinformationen (Metadaten) definieren, die die Präsenz des Clients begleiten und von allen interessierten Empfängern empfangen werden; zum Beispiel kann der Benutzer, obwohl die Präsenz des Clients "online" ist, seinen benutzerdefinierten Status als "abwesend" oder "nicht stören" festlegen.

Um die PubNub-Präsenz zu aktivieren, loggen Sie sich in das Admin-Portal ein, navigieren Sie zu der App und dem Keyset, für das Sie die Präsenz aktivieren möchten, und schalten Sie den Präsenz-Schalter im Konfigurationsbildschirm des Keysets um:

Portal Configuration: Presence Enable

Sie werden aufgefordert, zu bestätigen, dass Sie die Anwesenheit aktivieren möchten.

Beachten Sie, dass die Aktivierung der Anwesenheit zu deutlich mehr Transaktionen führen kann, insbesondere für diejenigen, die einen transaktionsbasierten Tarif nutzen. Um die Anzahl der Transaktionen zu kontrollieren, können Sie die Funktion "Anwesenheitsverwaltung" verwenden, die weiter unten in diesem Artikel erläutert wird.

Portal Configuration: Presence Enable Confirm

Achten Sie darauf, alle Änderungen zu speichern, wenn Sie die Konfiguration Ihres Keysets ändern.

Portal Configuration: Presence Confirm Changes

Durchsage-Modus

Wenn diese Funktion aktiviert ist, erzeugt PubNub automatisch Präsenzereignisse, wenn sich Clients (Benutzer oder Geräte) bei einem Kanal anmelden oder abmelden.

Wenn ein Client einen Channel abonniert, wird ein Join-Event erzeugt:

{ "channel": "<Name des Channels, dem beigetreten wurde>", "action": "join", "occupancy": 2, // Kanalbelegung "uuid": "<Benutzerkennung des Clients, der beigetreten ist>", "timetoken": "<Wann der Beitritt erfolgte>" }
Enter fullscreen mode Exit fullscreen mode

Wenn sich ein Kunde von einem Kanal abmeldet, wird ein Leave-Ereignis erzeugt:

{ "channel": "<Name des Channels, der verlassen wurde>", "action": "leave", "occupancy": 1, // Kanalbelegung "uuid": "<Benutzerkennung des Kunden, der gegangen ist>", "timetoken": "<Zeitpunkt des Verlassens>" }
Enter fullscreen mode Exit fullscreen mode

Nehmen wir an, ein Web-Client ist mit einem Kanal verbunden und der Benutzer schließt zwangsweise die Registerkarte, anstatt dem Client zu erlauben, sich abzumelden:

Wenn der Client sich nicht explizit abmeldet, sondern nach einer gewissen Zeit (standardmäßig 300 Sekunden) als nicht anwesend erkannt wird, wird ein Timeout-Ereignis ausgelöst:

{ "channel": "<Name der Kanalverbindung, bei der die Zeit abgelaufen ist>", "action": "timeout", "occupancy":1, // Channel occupancy "uuid": "<Benutzerkennung des Clients, der die Zeitüberschreitung verursacht hat>", "timetoken": "<Wann die Zeitüberschreitung auftrat>" }
Enter fullscreen mode Exit fullscreen mode

Leave bei TCP FIN oder RST generieren

Anstatt auf das Timeout-Ereignis im obigen Szenario zu warten, besteht eine weitere Möglichkeit darin, auf Netzwerkebene zu erkennen, wann ein Client den Kanal verlässt. Durch Aktivieren der Option "Generate Leave on TCP FIN or RST" auf dem Keyset wird beim gewaltsamen Schließen der Browser-Registerkarte in diesem Szenario nun ein Leave-Ereignis erzeugt, das sofort ausgelöst wird, anstatt eines Timeout-Ereignisses.

Portal Configuration: Presence Generate Leave TCP FIN RST

Entprellung

Manchmal treten Clients schnell in Kanäle ein und verlassen diese wieder, entweder aufgrund von Netzwerkproblemen oder aufgrund des Designs Ihrer Anwendung. Um übermäßige Join- und Leave-Ereignisse zu vermeiden, geben Sie einen Entprellungswert in Sekunden an. Nachdem ein Client ein Join-Ereignis erzeugt hat, darf er z. B. für zwei Sekunden kein weiteres Join-Ereignis erzeugen.

Portal Configuration: Presence Debounce

Intervall-Modus

Maximal ankündigen

Die Join- und Leave-Ereignisse werden sofort ausgelöst, solange die Anzahl der Clients im Channel unter der Einstellung "Announce Max" bleibt, die standardmäßig 20 beträgt.

Portal Configuration: Presence Announce Max

Wenn die Anzahl der Teilnehmer in einem Channel steigt, nimmt auch die Anzahl der Join- und Leave-Ereignisse zu, aber ab einem gewissen Punkt wird es für einen Client überflüssig, alle diese Ereignisse in Echtzeit zu verwalten. Nehmen wir einen Gruppenchat mit 200 Teilnehmern: Muss der Client den Online-Status jedes einzelnen Teilnehmers aktualisieren, wenn dieser online oder offline geht? Das wären mehr Informationen, als ein menschlicher Benutzer im Auge behalten könnte.

Sie können Announce Max zwischen 1 und 100 konfigurieren. Sobald die Anzahl der Clients in einem Kanal "Announce Max" übersteigt, werden die Join-, Leave- und Timeout-Ereignisse nicht mehr erzeugt, sondern durch das Intervall-Ereignis ersetzt:

{ "channel: "<Name des Kanals, für den das Ereignis gilt>", "action": "interval", "occupancy": 4, // Kanalbelegung "timetoken": "<Wann ist das Intervallereignis eingetreten>" }
Enter fullscreen mode Exit fullscreen mode

Intervall

Sie können konfigurieren, wie oft das Intervallereignis ausgelöst wird, indem Sie die Konfigurationsoption Intervall ändern. Es sind Werte zwischen 10 Sekunden und 300 Sekunden (5 Minuten) zulässig.

Portal Configuration: Presence Interval

Das Intervall-Ereignis meldet nur die Kanalbelegung, es sei denn, Sie aktivieren "Presence Deltas".

Anwesenheits-Deltas

Portal Configuration: Presence Deltas

Wenn Sie "Präsenz-Deltas" aktivieren, enthält das Intervall-Ereignis auch Informationen darüber, welche Benutzer dem Kanal seit dem vorherigen Intervall-Ereignis beigetreten sind oder ihn verlassen haben.

{ "channel": "<Name des Kanals, für den das Ereignis gilt>", "action": "interval", "occupancy": 3, // Kanalbelegung "join": ["member4"], "leave": ["member3"], "timetoken": "<Wann das Intervallereignis eintrat>" }
Enter fullscreen mode Exit fullscreen mode

Andere Einstellungen

Aktiver Benachrichtigungskanal

Möglicherweise interessiert es Sie nicht, wie viele Clients mit einem Channel verbunden sind oder wer diese Clients sind, sondern nur, ob jemand einen Channel abonniert hat oder nicht. Wenn ein Channel 0 Abonnenten hat, wird er als inaktiv betrachtet. Ein Kanal mit 1 oder mehr Abonnenten gilt als aktiv.

Sie können sich registrieren lassen, um eine Benachrichtigung zu erhalten, wenn ein Kanal "aktiv" oder "inaktiv" wird, indem Sie einen "Aktiven Benachrichtigungskanal" angeben.

Portal Configuration: Presence Active Notice Channel

Wenn Sie diesen angeben, erhalten Sie Nachrichten auf diesem Kanal (in diesem Beispiel ist der Name des Kanals, der die Nachrichten erhält, "notice_channel"):

{ "channel": "<Name des Kanals, der aktiv oder inaktiv geworden ist>", "status": "active", // oder inactive "precise_timestamp": "<Wann das Intervallereignis eingetreten ist>" }
Enter fullscreen mode Exit fullscreen mode

Beachten Sie, dass aktive Ereignisse gesendet werden, sobald die Kanalbelegung den Wert 0 überschreitet, während inaktive Ereignisse nur dann ausgelöst werden, wenn der Kanal 300 Sekunden lang oder länger den Wert 0 aufweist.

Stream-Filterung

Die Option zur Deaktivierung der Stream-Filterung wird aus Legacy-Gründen beibehalten, und Entwickler haben wenig Nutzen davon, diese Einstellung zu deaktivieren. Die Stream-Filterung fügt Präsenz-Metadaten in Ereignisse ein, die in den Präsenz-Kanälen veröffentlicht werden, so dass Client-Filter auf diese Präsenz-Ereignisse angewendet werden können. Die Deaktivierung der Stream-Filterung verringert nicht die Anzahl der Präsenzereignisse; sie ermöglicht es dem Client lediglich, herauszufiltern, welche Ereignisse er erhält - um die Anzahl der Präsenzereignisse zu verringern, sollten Sie die Präsenzverwaltung verwenden, die weiter unten in diesem Artikel erläutert wird.

Portal Configuration: Presence Stream Filtering

Webhooks

Zuvor konnten Sie auf der Konfigurationsseite des Schlüsselsatzes mehrere Webhooks angeben, die beim Auftreten eines der folgenden Ereignisse ausgelöst werden sollten:

  • Beitrittsereignis ausgelöst
  • Ereignis "Verlassen" abgefeuert
  • Timeout-Ereignis abgefeuert
  • Intervall-Ereignis abgefeuert
  • Statusänderungsereignis abgefeuert
  • Ereignis "Kanal aktiv" oder " Kanal inaktiv" abgefeuert.

Diese Webhooks sind nicht mehr Teil der Keyset-Konfiguration, sondern wurden in die Funktion "Events & Actions" migriert. Webhooks werden in diesem Artikel nicht behandelt, aber weitere Informationen finden Sie im Abschnitt Webhook-Payload-Aktion in der Dokumentation zu Events & Actions.

Statusänderung

Wenn Sie einige Metadaten im Zusammenhang mit der Anwesenheit des Clients austauschen möchten, ist dies am besten mit der Funktion Anwesenheitsstatus möglich. Obwohl die zuvor besprochenen Join- und Leave-Ereignisse Ihnen beispielsweise mitteilen, ob der Client online oder offline ist, erfahren Sie dadurch nicht, ob der Benutzer "beschäftigt" oder "nicht stören" ist.

Ein Client kann das PubNub SDK verwenden, um einen benutzerdefinierten Status für einen bestimmten Kanal oder eine Kanalgruppe zu setzen. Einmal gesetzt, wird dieser Status an andere Clients weitergegeben und als Statusänderungsereignis empfangen.

{ "channel": "<Name des mit der Zustandsänderung verbundenen Kanals>", "uuid": "<ID des Clients, für den der Zustand gilt>", "action": "state-change", "state": {<JSON-Objekt, das den Zustand definiert>} "occupancy": 3, // Kanalbelegung "timetoken": "<Wann die Zustandsänderung stattfand>" }
Enter fullscreen mode Exit fullscreen mode

Die Zustandsänderung ist sehr flexibel und kann für den Austausch beliebiger serialisierbarer Daten verwendet werden. Unsere Demo für die Zusammenarbeit verwendet beispielsweise den Präsenzzustand, um Zuhörer zu benachrichtigen, wenn ein Zeichnungsereignis eintritt, so dass eine Anwendung für kollaboratives Zeichnen möglich ist, bei der die Kritzeleien allen Betrachtern in Echtzeit angezeigt werden

"state": {"x": 5, "y": 10, "color": "#FFFF00"}  // Beispiel für einen Status für eine Zeichenanwendung
Enter fullscreen mode Exit fullscreen mode

Der*einzige Nachteil von Zustandsänderungsereignissen ist, dass sie nicht dauerhaft sind*. Sie sollten daher nur für flüchtige Daten oder Daten, die jeder Client verfolgen soll, verwendet werden.

Steuern, welche Ereignisse Sie mit der Präsenzverwaltung erhalten

Wie bereits erwähnt, kann die Anzahl der Präsenzereignisse mit zunehmender Benutzerzahl schnell sehr groß werden. Um Ihnen eine bessere Kontrolle darüber zu geben, welche Ereignisse auf einem bestimmten Kanal ausgelöst werden, haben wir das Self-Service-Tool "Präsenzmanagement" eingeführt, mit dem Sie Regeln erstellen können, die steuern, welche Präsenzereignisse ausgelöst werden:

Das Präsenzmanagement-Tool kann über die entsprechende Schaltfläche auf dem Konfigurationsbildschirm des Keysets aufgerufen werden:

Portal Configuration: Presence Management

Sie können das Tool auch über das linke Menü unter dem Abschnitt "BizOps Workspace" aufrufen.

Eine vollständige Beschreibung der Konfiguration Ihrer Verwaltungsregeln finden Sie in der Dokumentation zur Anwesenheitsverwaltung:

  1. Erstellen Sie eine neue Regel; Sie können mehrere Regeln erstellen, um die Präsenzereignisse, die Sie für Ihre Anwendung auslösen möchten, vollständig zu definieren.
  2. Geben Sie die Ereignisse an, die diese Regel steuern soll, einschließlich Beitritt, Austritt, Zeitüberschreitung, Statusänderung und Intervall. In diesem Artikel wurde bereits beschrieben, was diese Regeln sind und wann sie ausgelöst werden.
  3. Geben Sie ein Platzhaltermuster an, um den Channel oder die Channel-Gruppen zu definieren, für die diese Regel gilt; zum Beispiel gilt personal-* für alle Channels, die mit personal- beginnen.
  4. Klicken Sie auf "Erstellen" und legen Sie die Reihenfolge fest, in der Ihre Regeln gelten sollen.

Präsenzmanagement über die PubNub-API

Sie können Präsenzereignisse über jedes unserer SDKs empfangen. Dieser Artikel konzentriert sich hauptsächlich auf Präsenz-Ereignisse, die über den SDK-Ereignis-Listener empfangen werden, aber unsere APIs unterstützen auch zusätzliche Funktionen, um festzustellen, wer in einem bestimmten Kanal zuhört(here now) und wo ein bestimmter Benutzer abonniert ist(where now)

In JavaScript kann die hereNow-API wie folgt aufgerufen werden, um festzustellen, wer bei dem angegebenen Kanal abonniert ist:

try {
  const result = await pubnub.hereNow({
    channels: ["my_channel"],
    includeState: true,
    includeUUIDs: true
  });
  console.log(total occupancy:  + result.totalOccupancy)
} catch (status) {
  console.log(status);
}
Enter fullscreen mode Exit fullscreen mode

Weitere Ressourcen

Presence ist eine der wertvollsten und flexibelsten Funktionen der PubNub-Plattform. Genau zu wissen, wer online ist und diesen Status in Echtzeit zu aktualisieren, hat unseren Kunden im Laufe der Jahre die Entwicklung einiger faszinierender Lösungen ermöglicht.

  • Unsere Presence Basics Dokumentation ist ein guter Ausgangspunkt, um die Konzepte von Presence zu verstehen.
  • Unsere Subscribe-Dokumentation zeigt anhand von Beispielen, wie ein Kanal mit aktivierter Präsenz abonniert werden kann, und verweist auf die SDK-spezifische Dokumentation für API-Beispiele, die zeigen, wie ein Listener-Callback für Präsenzereignisse hinzugefügt werden kann (z. B. diese Seite für unser JavaScript-SDK).
  • Ein guter Startpunkt für neue Entwickler ist das Tutorial Erste Schritte, das verschiedene Programmiersprachen abdeckt. In den Tutorials werden auch andere Presence-Funktionen behandelt, z. B. die "Here Now"-API, mit der festgestellt werden kann, wer einem Kanal zuhört.

Wenn Sie Hilfe oder Unterstützung benötigen, wenden Sie sich bitte an unser Pubnub-Supportteam oder schreiben Sie eine E-Mail an unser Developer Relations Team unter devrel@pubnub.com.

Wie kann PubNub Ihnen helfen?

Dieser Artikel wurde ursprünglich auf PubNub.com veröffentlicht.

Unsere Plattform hilft Entwicklern bei der Erstellung, Bereitstellung und Verwaltung von Echtzeit-Interaktivität für Webanwendungen, mobile Anwendungen und IoT-Geräte.

Die Grundlage unserer Plattform ist das größte und am besten skalierbare Echtzeit-Edge-Messaging-Netzwerk der Branche. Mit über 15 Points-of-Presence weltweit, die 800 Millionen monatlich aktive Nutzer unterstützen, und einer Zuverlässigkeit von 99,999 % müssen Sie sich keine Sorgen über Ausfälle, Gleichzeitigkeitsgrenzen oder Latenzprobleme aufgrund von Verkehrsspitzen machen.

PubNub erleben

Sehen Sie sich die Live Tour an, um in weniger als 5 Minuten die grundlegenden Konzepte hinter jeder PubNub-gestützten App zu verstehen

Einrichten

Melden Sie sich für einen PubNub-Account an und erhalten Sie sofort kostenlosen Zugang zu den PubNub-Schlüsseln

Beginnen Sie

Mit den PubNub-Dokumenten können Sie sofort loslegen, unabhängig von Ihrem Anwendungsfall oder SDK

Top comments (0)