DEV Community

Cover image for Jak włączyć i skonfigurować PubNub Presence

Jak włączyć i skonfigurować PubNub Presence

Jak wykryć, kiedy użytkownik przechodzi w tryb online lub offline, lub skąd wiadomo, czy urządzenie klienckie jest połączone i kiedy się rozłącza? Obecność PubNub pozwala śledzić, kto jest połączony z Twoimi kanałami w czasie rzeczywistym i powiadamia Cię, gdy zmienia się ich status połączenia.

Embedded YouTube Video

Obejrzyj wideo

System obecności jest bardzo elastyczny i umożliwia takie zastosowania jak:

  • Monitorowanie, kiedy użytkownicy dołączają lub opuszczają rozmowę na czacie
  • Wykrywanie, kiedy użytkownik jest online lub offline
  • Określanie, czy urządzenie IoT jest podłączone i dostępne
  • Zliczanie, ilu klientów jest podłączonych do kanału (zliczanie zajętości kanału).

Można również zdefiniować pewne informacje o stanie (metadane) towarzyszące obecności klienta, które będą odbierane przez wszystkich zainteresowanych odbiorców; na przykład, chociaż obecność klienta jest "online", użytkownik może ustawić swój niestandardowy status jako "nieobecny" lub "nie przeszkadzać".

Aby włączyć obecność PubNub, zaloguj się do portalu administratora, przejdź do aplikacji i zestawu klawiszy, w którym chcesz włączyć obecność, i przełącz przełącznik obecności na ekranie konfiguracji tego zestawu klawiszy:

Portal Configuration: Presence Enable

Zostaniesz poproszony o potwierdzenie, że chcesz włączyć obecność.

Należy pamiętać, że włączenie obecności może skutkować znacznie większą liczbą transakcji, zwłaszcza w przypadku osób korzystających z planu cenowego opartego na transakcjach. Aby kontrolować liczbę transakcji, możesz użyć funkcji "Zarządzanie obecnością", wyjaśnionej w dalszej części tego artykułu.

Portal Configuration: Presence Enable Confirm

Pamiętaj, aby zapisać wszelkie zmiany za każdym razem, gdy dokonujesz modyfikacji konfiguracji zestawu kluczy.

Portal Configuration: Presence Confirm Changes

Tryb ogłaszania

Po włączeniu, PubNub będzie automatycznie generował zdarzenia obecności, gdy klienci (użytkownicy lub urządzenia) subskrybują lub wypisują się z dowolnego kanału.

Gdy klient zasubskrybuje kanał, wygeneruje zdarzenie dołączenia:

{ "channel": "<nazwa kanału, do którego dołączono>", "action": "join", "occupancy": 2, // zajętość kanału "uuid": "<userid klienta, który dołączył>", "timetoken": "<Gdy nastąpiło dołączenie>" }
Enter fullscreen mode Exit fullscreen mode

Gdy klient zrezygnuje z subskrypcji kanału, wygeneruje zdarzenie opuszczenia kanału:

{ "channel": "<nazwa kanału, który został opuszczony>", "action": "leave", "occupancy": 1, // zajętość kanału "uuid": "<userid klienta, który opuścił>", "timetoken": "<Kiedy nastąpiło opuszczenie>" }
Enter fullscreen mode Exit fullscreen mode

Weźmy pod uwagę, że klient internetowy połączył się z kanałem, a użytkownik przymusowo zamknął kartę, zamiast pozwolić klientowi na rezygnację z subskrypcji:

Jeśli klient nie zrezygnuje wyraźnie z subskrypcji, ale zostanie wykryty jako nieobecny po pewnym czasie (domyślnie 300 sekund), zostanie wyzwolone zdarzenie przekroczenia limitu czasu:

{ "channel": "<nazwa połączenia kanału, które przekroczyło limit czasu>", "action": "timeout", "occupancy":1, // zajętość kanału "uuid": "<userid klienta, który przekroczył limit czasu>", "timetoken": "<When the timeout occurred>" }
Enter fullscreen mode Exit fullscreen mode

Generowanie Leave na TCP FIN lub RST

Zamiast czekać na zdarzenie przekroczenia limitu czasu w powyższym scenariuszu, inną opcją jest wykrycie na poziomie sieci, kiedy klient opuszcza kanał. Włączając opcję "Generate Leave on TCP FIN or RST" w zestawie kluczy, wymuszone zamknięcie karty przeglądarki w tym scenariuszu wygeneruje teraz zdarzenie opuszczenia, które zostanie uruchomione natychmiast, zamiast zdarzenia przekroczenia limitu czasu.

Portal Configuration: Presence Generate Leave TCP FIN RST

Debounce

Czasami klienci szybko dołączają i opuszczają kanały, albo z powodu problemów z siecią, albo z powodu projektu aplikacji. Aby uniknąć nadmiernej liczby zdarzeń dołączania i opuszczania, należy określić wartość debounce w sekundach. Gdy klient wygeneruje zdarzenie dołączenia, nie będzie mógł wygenerować kolejnego zdarzenia dołączenia przez kolejne dwie sekundy.

Portal Configuration: Presence Debounce

Tryb interwału

Announce Max

Zdarzenia dołączenia i opuszczenia będą wyzwalane natychmiast, o ile liczba klientów w kanale pozostanie poniżej ustawienia "Announce Max", które domyślnie wynosi 20.

Portal Configuration: Presence Announce Max

Wraz ze wzrostem liczby użytkowników w kanale, liczba zdarzeń dołączenia i opuszczenia również wzrośnie, ale w pewnym momencie próba utrzymania wszystkich tych zdarzeń w czasie rzeczywistym staje się nieekonomiczna dla klienta. Rozważmy czat grupowy z 200 uczestnikami; czy klient musi aktualizować stan online każdego z tych uczestników, gdy przechodzą do trybu online lub offline? Byłoby to więcej informacji, niż ludzki użytkownik mógłby śledzić.

Announce Max można skonfigurować w zakresie od 1 do 100. Gdy liczba klientów w kanale przekroczy "Announce Max", zdarzenia dołączenia, opuszczenia i przekroczenia limitu czasu nie będą już generowane, ale zostaną zastąpione zdarzeniem interwału:

{ "channel: "<nazwa kanału, którego dotyczy zdarzenie>", "action": "interval", "occupancy": 4, // zajętość kanału "timetoken": "<Gdy wystąpiło zdarzenie interwału>" }
Enter fullscreen mode Exit fullscreen mode

Interwał

Można skonfigurować częstotliwość uruchamiania zdarzenia interwału, modyfikując opcję konfiguracji Interval. Dozwolone są wartości od 10 sekund do 300 sekund (5 minut).

Portal Configuration: Presence Interval

Zdarzenie interwału będzie powiadamiać tylko o zajętości kanału, chyba że włączona zostanie opcja "Presence Deltas".

Opóźnienia obecności

Portal Configuration: Presence Deltas

Po włączeniu opcji "Presence Deltas" zdarzenie interwału będzie również zawierać informacje o tym, którzy użytkownicy dołączyli lub opuścili kanał od poprzedniego zdarzenia interwału.

{ "channel": "<nazwa kanału, którego dotyczy zdarzenie>", "action": "interval", "occupancy": 3, // zajętość kanału "join": ["member4"], "leave": ["member3"], "timetoken": "<Gdy wystąpiło zdarzenie interwału>" }
Enter fullscreen mode Exit fullscreen mode

Inne ustawienia

Aktywny kanał powiadomień

Możesz nie być zainteresowany tym, ilu klientów jest połączonych z kanałem lub kim są ci klienci, ale zamiast tego możesz dbać tylko o to, czy ktoś jest subskrybentem kanału. Jeśli kanał ma 0 subskrybentów, jest uważany za nieaktywny. Kanał z 1 lub więcej subskrybentami jest uważany za aktywny.

Możesz zarejestrować się, aby otrzymywać powiadomienia, gdy kanał stanie się "aktywny" lub "nieaktywny", określając "Aktywny kanał powiadomień".

Portal Configuration: Presence Active Notice Channel

Jeśli zostanie określony, będziesz otrzymywać wiadomości na tym kanale (w tym przykładzie nazwa kanału, który otrzymuje wiadomości to "notice_channel"):

{ "channel": "<nazwa kanału, który stał się aktywny lub nieaktywny>", "status": "active", // lub nieaktywny "precise_timestamp": "<Kiedy wystąpiło zdarzenie interwału>" }
Enter fullscreen mode Exit fullscreen mode

Należy pamiętać, że zdarzenia aktywne są wysyłane, gdy tylko zajętość kanału wzrośnie powyżej 0, ale zdarzenia nieaktywne kanału będą uruchamiane tylko wtedy, gdy kanał ma zajętość 0 przez 300 sekund lub dłużej.

Filtrowanie strumieni

Opcja wyłączenia filtrowania strumieni została zachowana ze względów historycznych, a deweloperzy uzyskają niewielkie korzyści z wyłączenia tego ustawienia. Filtrowanie strumieni będzie zawierać metadane obecności w zdarzeniach publikowanych w kanałach obecności, umożliwiając stosowanie filtrów klienta do tych zdarzeń obecności. Wyłączenie filtrowania strumieni nie zmniejsza liczby zdarzeń obecności; pozwala jedynie klientowi filtrować zdarzenia, które otrzymują - aby zmniejszyć liczbę zdarzeń obecności, należy użyć Zarządzania obecnością, wyjaśnionego w dalszej części tego artykułu.

Portal Configuration: Presence Stream Filtering

Webhooki

Wcześniej strona konfiguracji zestawu kluczy pozwalała na określenie wielu webhooków, które byłyby uruchamiane, gdy wystąpiło którekolwiek z poniższych zdarzeń:

  • zdarzeniedołączenia
  • zdarzenieopuszczenia
  • zdarzenie przekroczenialimitu czasu
  • uruchomienie zdarzeniainterwału
  • zdarzeniezmiany stanu
  • uruchomienie zdarzeniaaktywnego lub nieaktywnegokanału.

Te webhooki nie są już częścią konfiguracji zestawu kluczy, ale zostały przeniesione do funkcji Events & Actions. Webhooki nie będą omawiane w ramach tego artykułu, ale aby uzyskać więcej informacji, zapoznaj się z sekcją Webhook Payload w dokumentacji Events & Actions.

Zmiana stanu

Jeśli chcesz wymienić pewne metadane związane z obecnością klienta, najlepszym sposobem na osiągnięcie tego jest funkcja Presence State. Na przykład, chociaż zdarzenia dołączenia i opuszczenia omówione wcześniej informują o tym, czy klient jest online czy offline, nie informują o tym, czy użytkownik jest "zajęty" lub "nie przeszkadzać".

Klient może użyć PubNub SDK do ustawienia niestandardowego stanu na określonym kanale lub grupie kanałów. Po ustawieniu stan ten jest propagowany do innych klientów i odbierany jako zdarzenie zmiany stanu.

{ "channel": "<nazwa kanału powiązanego ze zmianą stanu>", "uuid": "<ID klienta, którego dotyczy stan>", "action": "state-change", "state": {<obiekt JSON definiujący stan>} "occupancy": 3, // zajętość kanału "timetoken": "<Kiedy nastąpiła zmiana stanu>" }
Enter fullscreen mode Exit fullscreen mode

Zmiana stanu jest bardzo elastyczna i może być używana do wymiany dowolnych serializowalnych danych; na przykład nasze demo współpracy wykorzystuje stan obecności do powiadamiania słuchaczy o wystąpieniu zdarzenia rysowania, umożliwiając wspólną aplikację do rysowania, z doodles wyświetlanymi wszystkim widzom w czasie rzeczywistym

"state": {"x": 5, "y": 10, "color": "#FFFF00"}  // Przykładowy ładunek stanu dla aplikacji do rysowania
Enter fullscreen mode Exit fullscreen mode

Jedynym zastrzeżeniem dotyczącym zdarzeń zmiany stanu jest to, że nie są one trwałe, więc powinny być używane tylko w przypadku danych efemerycznych lub danych, które każdy klient powinien śledzić.

Kontrolowanie zdarzeń otrzymywanych za pomocą Presence Management

Jak wspomniano wcześniej, liczba zdarzeń obecności może łatwo stać się bardzo duża wraz ze wzrostem bazy użytkowników. Aby zapewnić większą kontrolę nad tym, które zdarzenia są uruchamiane na określonym kanale, wprowadziliśmy samoobsługowe narzędzie "Zarządzanie obecnością", które umożliwia tworzenie reguł kontrolujących, które zdarzenia obecności będą uruchamiane:

Narzędzie Presence Management można uruchomić za pomocą odpowiedniego przycisku na ekranie konfiguracji zestawu klawiszy:

Portal Configuration: Presence Management

Dostęp do narzędzia można również uzyskać z menu po lewej stronie w sekcji "BizOps Workspace".

Pełny opis sposobu konfigurowania reguł zarządzania znajduje się w dokumentacji Presence Management, ale w skrócie:

  1. Utwórz nową regułę; możesz mieć wiele reguł, aby w pełni zdefiniować zdarzenia obecności, które chcesz wyzwolić dla swojej aplikacji.
  2. Określ zdarzenia, które mają być kontrolowane przez tę regułę, w tym dołączenie, opuszczenie, przekroczenie limitu czasu, zmianę stanu i interwał. W tym artykule opisano, czym są te reguły i kiedy są uruchamiane.
  3. Określ wzorzec wieloznaczny, aby zdefiniować kanał lub grupy kanałów, których dotyczy ta reguła; na przykład personal-* będzie dotyczyć wszystkich kanałów, które zaczynają się od personal-.
  4. Kliknij "Utwórz" i zdefiniuj kolejność, w jakiej reguły mają być stosowane.

Zarządzanie obecnością poprzez PubNub API

Zdarzenia obecności można odbierać za pośrednictwem dowolnego z naszych zestawów SDK. W tym artykule skupiono się głównie na zdarzeniach związanych z obecnością, które są odbierane za pośrednictwem detektora zdarzeń SDK, ale nasze interfejsy API obsługują również dodatkowe funkcje pozwalające określić, kto nasłuchuje na określonym kanale(here now) i gdzie subskrybowany jest określony użytkownik(where now).

W JavaScript, interfejs API HereNow można wywołać w następujący sposób, aby określić, kto jest subskrybentem określonego kanału:

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

Więcej zasobów

Obecność jest jedną z najbardziej wartościowych i elastycznych funkcji platformy PubNub. Dokładna wiedza o tym, kto jest online i możliwość aktualizacji statusu w czasie rzeczywistym umożliwiła naszym klientom tworzenie intrygujących rozwiązań na przestrzeni lat.

  • Nasza dokumentacja Presence Basics jest dobrym punktem wyjścia do zrozumienia koncepcji obecności.
  • Nasza dokumentacja Subscribe zawiera przykłady pokazujące, jak zasubskrybować kanał z włączoną obecnością i odnieść się do dokumentacji specyficznej dla SDK dla przykładów API pokazujących, jak dodać wywołanie zwrotne słuchacza dla zdarzeń obecności (np. ta strona dla naszego JavaScript SDK).
  • Aby uzyskać więcej praktyki, większość naszych samouczków będzie obejmować obecność, a dobrym miejscem startowym dla nowych programistów jest nasz samouczek Pierwsze kroki, który obejmuje kilka języków programowania. Samouczki będą również obejmować inne funkcje obecności, takie jak API "tutaj teraz", aby określić, kto słucha na kanale.

Wreszcie, jeśli potrzebujesz pomocy lub wsparcia, skontaktuj się z naszym dedykowanym zespołem wsparcia pubnub lub napisz do naszego zespołu ds. relacji z programistami na adres devrel@pubnub.com.

Jak PubNub może ci pomóc?

Ten artykuł został pierwotnie opublikowany na PubNub.com

Nasza platforma pomaga programistom tworzyć, dostarczać i zarządzać interaktywnością w czasie rzeczywistym dla aplikacji internetowych, aplikacji mobilnych i urządzeń IoT.

Podstawą naszej platformy jest największa w branży i najbardziej skalowalna sieć komunikacyjna w czasie rzeczywistym. Dzięki ponad 15 punktom obecności na całym świecie obsługującym 800 milionów aktywnych użytkowników miesięcznie i niezawodności na poziomie 99,999%, nigdy nie będziesz musiał martwić się o przestoje, limity współbieżności lub jakiekolwiek opóźnienia spowodowane skokami ruchu.

Poznaj PubNub

Sprawdź Live Tour, aby zrozumieć podstawowe koncepcje każdej aplikacji opartej na PubNub w mniej niż 5 minut.

Rozpocznij konfigurację

Załóż konto PubNub, aby uzyskać natychmiastowy i bezpłatny dostęp do kluczy PubNub.

Rozpocznij

Dokumenty PubNub pozwolą Ci rozpocząć pracę, niezależnie od przypadku użycia lub zestawu SDK.

Top comments (0)