Wysyłaj wiadomości na żywo i informacje o obecności za pomocą pakietu JavaScript SDK
Codzienne przepływy aura.realtime z zachowaniem każdego wywołania obserwowanym na działającym stosie.
1. Kanały i ich status
Kanał to nazwany pokój. Klienci, którzy otworzą tę samą nazwę, otrzymają wzajemne wiadomości. Klient łączy się sam po wykupieniu subskrypcji.
Wyślij dopiero po SUBSCRIBED. Wcześniej lub po odmowie send() zamiast wysyłać zwraca status taki jak not_connected lub requires_subscription. Kanały są ograniczone do Twojego projektu: dwa projekty mogą używać tej samej nazwy, nie widząc się nawzajem.
2. Rozgłaszaj wiadomości
W rzeczywistości drugi zalogowany klient otrzymał wiadomość w czasie krótszym niż dwie sekundy.
Otrzymana wiadomość zawiera nazwę zdarzenia dodaną do payload: { "event": "ping", "n": 1, … }. Payload z własnym kluczem event jest odrzucany (channel.send zwraca 'invalid_payload', httpBroadcast zwraca realtime_payload_event_reserved): zmień nazwę klucza, na przykład na kind.
- Domyślnie nie otrzymujesz własnych wiadomości. Otwórz kanał za pomocą
{ config: { broadcast: { self: true } } }, aby je otrzymać. - Wiadomość zawiera
id,topic,timestamp,eventipayload.
3. Obecność
Obecność pokazuje, kto jest podłączony do kanału, w wybranym przez Ciebie stanie.
presenceState() jest wprowadzany na podstawie identyfikatora użytkownika. Każdy wpis zawiera listę połączeń użytkownika:
untrack() usuwa Cię z listy, a opuszczenie kanału lub zamknięcie strony robi to za Ciebie.
4. Zmiany w bazach danych
postgres_changes działa w projektach z własną bazą danych. Najpierw włącz każdą tabelę: PUT /v1/db/{project_id}/schema/tables/{table}/realtime z treścią {"enabled": true} i kluczem service_role. Nasłuchiwanie zaczyna się, gdy subskrybuje pierwszy klient, i kończy kilka minut po odejściu ostatniego. Dostarczanie odbywa się co najmniej raz: po restarcie serwera zmiana może dotrzeć dwukrotnie, więc niech Twoja obsługa będzie idempotentna, na przykład oparta na kluczu głównym wiersza. Obciążony klaster może odrzucić nowe nasłuchiwanie z błędem pojemności; spróbuj ponownie za chwilę. Nazwij kanał od tabeli, db:public.<table>: zmiany są publikowane na tym kanale. Pierwszy subskrybent może otrzymać do 5 sekund zmian wprowadzonych tuż przed subskrypcją. Zmiany są przechowywane przez godzinę na potrzeby wznowienia, a potem usuwane. Gdy klaster jest pełny, subskrypcja kończy się błędem capacité d'écoute postgres_changes atteinte pour la base de ce projet, réessayez. Jeśli nasłuch pozostaje utracony dłużej niż minutę, kanał przechodzi w CHANNEL_ERROR; zasubskrybuj ponownie po jego przywróceniu. Awaria dłuższa niż godzina przechowywania traci zmiany wprowadzone w jej trakcie.
5. Posprzątaj
Obejrzyj połączenie z aura.realtime.onStateChange(callback) i onError(callback). Po zrzuceniu klient sam się ponownie łączy, chyba że wywołasz setAutoReconnect(false).