Logo Aurabase
aurabazadokumenty
dokumenty›Przewodniki›Realtime and presence (SDK)

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.

7 min przeczytane·Poziom mediator·Zmieniono 12 paź 2026
Ten tekst w języku angielskim został wygenerowany automatycznie na podstawie francuskiego oryginału i nie był jeszcze recenzowany.
Źródło angielskie uległo zmianie od czasu tego tłumaczenia. Niektóre informacje mogą być nieaktualne.
Ta strona została przetłumaczona automatycznie. Wersja angielska jest miarodajna.
#
Kanały

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.

channel.tstypescript
const room = aura.realtime.channel('room-1')

room.subscribe((status) => {
  // „SUBSKRYBOWANO” | „BŁĄD KANAŁU” | „TIMED_OUT” | 'ZAMKNIĘTE'
  if (status === 'SUBSCRIBED') console.log('ready')
})

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.

#
Audycja

2. Rozgłaszaj wiadomości

broadcast.tstypescript
// Odbierać
room.on('broadcast', { event: 'ping' }, (message) => {
  console.log(message.payload) // { zdarzenie: 'ping', n: 1, tekst: 'witaj' }
})

// Wyślij po SUBSKRYBCJI
const status = await room.send({ type: 'broadcast', event: 'ping', payload: { n: 1, text: 'hello' } })
// → „ok”

W rzeczywistości drugi zalogowany klient otrzymał wiadomość w czasie krótszym niż dwie sekundy.

Ładunek zawiera klucz event

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, event i payload.
#
Obecność

3. Obecność

Obecność pokazuje, kto jest podłączony do kanału, w wybranym przez Ciebie stanie.

presence.tstypescript
const lobby = aura.realtime.channel('lobby', { config: { presence: { key: user.id } } })

lobby.on('presence', { event: 'sync' }, () => {
  console.log(lobby.presenceState())
})
lobby.subscribe(async (status) => {
  if (status === 'SUBSCRIBED') await lobby.track({ name: 'Bob' })
})

presenceState() jest wprowadzany na podstawie identyfikatora użytkownika. Każdy wpis zawiera listę połączeń użytkownika:

presenceState()json
{
  "d6ba3994-…": [
    { "client_id": "936cb015-…", "user_id": "d6ba3994-…", "metadata": { "name": "Bob" },
      "joined_at": "2026-10-12T19:32:19.093Z", "last_seen": "2026-10-12T19:32:19.096Z" }
  ]
}

untrack() usuwa Cię z listy, a opuszczenie kanału lub zamknięcie strony robi to za Ciebie.

#
Zmiany

4. Zmiany w bazach danych

Projekty z własną bazą 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.

changes.tstypescript
const changes = aura.realtime
  .channel('db:public.todos')
  .on('postgres_changes', { event: '*', schema: 'public', table: 'todos' }, (payload) => {
    console.log(payload.eventType, payload.new)
  })
  .subscribe((status) => {
    if (status === 'CHANNEL_ERROR') console.warn('database changes are not available for this project')
  })
#
Posprzątać

5. Posprzątaj

cleanup.tstypescript
room.unsubscribe()                 // opuść jeden kanał
aura.realtime.removeChannel(room)  // wyjdź i zapomnij
aura.realtime.removeAllChannels()  // opuść każdy kanał
aura.realtime.disconnect()         // zamknij połączenie

Obejrzyj połączenie z aura.realtime.onStateChange(callback) i onError(callback). Po zrzuceniu klient sam się ponownie łączy, chyba że wywołasz setAutoReconnect(false).

Ostatnia aktualizacja · 12 paź 2026