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.
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:
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.
Pamiętaj, aby zapisać wszelkie zmiany za każdym razem, gdy dokonujesz modyfikacji konfiguracji zestawu kluczy.
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>" }
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>" }
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>" }
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.
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.
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.
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>" }
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).
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
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>" }
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ń".
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>" }
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.
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ń:
- zdarzenie
dołączenia
- zdarzenie
opuszczenia
- zdarzenie przekroczenia
limitu
czasu - uruchomienie zdarzenia
interwału
- zdarzenie
zmiany
stanu - uruchomienie zdarzenia
aktywnego
lubnieaktywnego
kanał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>" }
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
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:
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:
- Utwórz nową regułę; możesz mieć wiele reguł, aby w pełni zdefiniować zdarzenia obecności, które chcesz wyzwolić dla swojej aplikacji.
- Określ zdarzenia, które mają być kontrolowane przez tę regułę, w tym
dołączenie,
opuszczenie,
przekroczenie limitu czasu,
zmianę stanu
iinterwał
. W tym artykule opisano, czym są te reguły i kiedy są uruchamiane. - 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ę odpersonal-
. - 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);
}
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)