Kanał to nazwa. Niczego nie trzeba konfigurować.

Kanał istnieje od momentu, gdy coś go zasubskrybuje, i znika, gdy ostatnie połączenie się rozłączy. Jego nazwa określa typ: public dla danych dostępnych każdemu odwiedzającemu, private dla danych ograniczonych do jednego klienta, presence dla pokoju z listą uczestników, a prefiks cache dla stanu, który spóźniony uczestnik potrzebuje natychmiast.

channels.ts
4 subscribed
const bird = new BirdRealtime({ appKey: APP_KEY, region: "us1" });

// Public: anyone holding the app key can subscribe.
const scores = bird.subscribe("match-42");

// Private: your backend signs every subscription.
const order = bird.subscribe("private-order-ord_123");

// Presence: private, plus an identity the room can see.
const room = bird.subscribe("presence-room-42");

// Cache: the latest event replays to whoever joins next.
const build = bird.subscribe("cache-build-8821");

build.bind("bird:cache_miss", () => showSkeleton());

Prefiks jest konfiguracją.

Nie ma rejestru kanałów, który trzeba synchronizować.

Kanały to model adresowania Bird Realtime API. Nigdy nie tworzysz kanału: subskrybujesz nazwę, a trzy pierwsze znaki tej nazwy mówią krawędzi, jak ją traktować. Nazwa bez prefiksu jest publiczna. private- wymaga od twojego backendu zatwierdzenia każdej subskrypcji. presence- robi to samo i dołącza tożsamość. private-encrypted- szyfruje zawartość kluczem, którego Bird nigdy nie posiada. Nazwy mogą mieć do 164 znaków, rozróżniają wielkość liter i są jedynym elementem kanału, który warto starannie przemyśleć, bo publiczna nazwa jest widoczna dla każdego, kto ma klucz aplikacji.

Pięć rodzajów pokojów.

Ten sam protokół, ten sam klient, to samo wywołanie publish. Różni się tylko nazwa.

  1. 01

    Kanały publiczne.

    Bez endpointu autoryzacji, bez rejestracji. Każdy posiadacz klucza aplikacji może subskrybować, co sprawdza się przy wynikach buildów, wynikach na żywo, informacjach o lotach czy stronie statusu, ale nie przy danych ograniczonych do jednego klienta. Nie umieszczaj identyfikatorów w nazwie: orders niczego nie ujawnia, orders-user-4821 ujawnia, że użytkownik 4821 istnieje.

  2. 02

    Kanały prywatne.

    Nazwa z prefiksem private- kieruje subskrypcję przez twój własny endpoint, który sprawdza sesję i podpisuje identyfikator połączenia oraz nazwę kanału sekretem aplikacji. Twoje reguły, twoja sesja, twój 403. Krawędź weryfikuje podpis i nic innego nie dociera do kanału.

  3. 03

    Kanały presence.

    Autoryzacja jak w kanale prywatnym plus tożsamość, więc każdy subskrybent otrzymuje listę członków i dowiaduje się o dołączeniach i odejściach. To jedyny typ kanału z listą uczestników.

  4. 04

    Kanały szyfrowane.

    Kanał private-encrypted- przenosi dane zaszyfrowane 32-bajtowym kluczem głównym, który nigdy nie pojawia się w żądaniu Realtime. Krawędź i wszystko między nią a przeglądarką widzi szyfrogram. Nazwy kanałów i zdarzeń pozostają jawne, więc wybieraj nazwy, które nie zdradzają, co chronisz.

  5. 05

    Kanały cache.

    Rozpocznij nazwę od cache-, po dowolnym prefiksie typu, a kanał zapamięta ostatnie zdarzenie opublikowane przez API i odtworzy je każdemu nowemu subskrybentowi. Subskrypcja pełni jednocześnie rolę pobrania stanu początkowego. Dwa ograniczenia warte uwzględnienia w projekcie: przechowywane jest tylko najnowsze zdarzenie i może wygasnąć przed 30-minutowym limitem, więc umieszczaj cały stan w każdym payloadzie i uzupełniaj go z webhooka cache-miss, zamiast zakładać, że cache jest aktualny.

Jeden publish, do stu kanałów.

Publikowanie to zwykłe wywołanie REST z twojego serwera. Wskaż do 100 kanałów w jednym żądaniu, a krawędź rozśle zdarzenie do nich wszystkich. Batch zawiera do 10 niezależnych zdarzeń, każde do własnego kanału. Przekaż identyfikator połączenia działającego klienta jako exclude_connection_id, a karta, która już zastosowała zmianę lokalnie, zostanie pominięta. Zażądaj liczby połączeń lub członków za pomocą include, a odpowiedź poda stan każdego kanału w momencie publikacji. Powtórz żądanie z tym samym kluczem idempotentności, a wiadomość nie zostanie dostarczona podwójnie.

publish.ts
200 · accepted
// One event, up to 100 channels, one request.
const result = await bird.realtime.publish(APP_ID, {
  event: "score-updated",
  channels: ["match-42", "cache-match-42"],
  data: { home: 2, away: 1 },
  // The tab that scored already rendered it locally.
  exclude_connection_id: "26896.319537",
  include: ["connection_count"],
});

for (const channel of result.data ?? []) {
  console.log(channel.name, channel.connection_count);
}

Klienci mogą komunikować się bezpośrednio.

Wskaźnik pisania czy pozycja kursora nie muszą trafiać do twojego API. Włącz zdarzenia klienckie w aplikacji, a zasubskrybowany klient może wywołać zdarzenie o nazwie client-something bezpośrednio do pozostałych w kanale, z limitem 10 na sekundę na połączenie. Działają tylko na kanałach private i presence — celowo: klucz aplikacji jest zawarty w twojej stronie, więc to autoryzacja czyni klienta wystarczająco wiarygodnym, by nadawać. Traktuj to, co przychodzi, jako sygnał, nigdy jako autorytatywny stan, bo krawędź nie waliduje payloadu.

Co kanał zapamiętuje, a czego nie.

Publish zwraca odpowiedź, gdy krawędź zaakceptuje zdarzenie. Dostarczanie jest asynchroniczne, nie ma potwierdzenia per klient, a klient, który rozłączy się w trakcie dostarczania, nie otrzyma zdarzenia ponownie po reconnect. Taki jest uczciwy kontrakt i dlatego trwały stan należy trzymać w bazie danych, a zdarzenia ogłaszają, że się zmienił. Limity są takie same w każdym planie: 100 kanałów na publish, 10 zdarzeń na batch, 10 KB na payload, nazwy kanałów do 164 znaków.

Więcej szczegółów w dokumentacji.

Przegląd Realtime definiuje kanały, członków i połączenia na jednej stronie. Publikowanie zdarzeń obejmuje broadcast, batch i wykluczanie, kanały cache wyjaśniają odtwarzanie, a odpytywanie stanu kanału to odczyt po stronie serwera dla zajętości i liczników.

Skaluj bez
utraty kontroli.

Organizuj zespoły w obszarach roboczych, kontroluj dostęp do API i śledź zmiany w logach audytu.

BirdHarborOrganizacja
Przestrzenie roboczeProdukcjaSandbox

Agent wysyłki

Klucz API · Zespół operacji klienta
Aktywne
UprawnieniaDostęp
EmailOdczyt i zapis
SMSOdczyt i zapis
ALAlex Lee AdministratorZaktualizowano uprawnienia

Dziennik audytu

Produkcja
Przestrzeń robocza
Produkcja
Zasób
Agent wysyłki
WhatsApp
Dostęp do odczytuOdczyt i zapis
Powodzenie

Zacznij z Realtime.
Twórz na wielu kanałach z Bird.

Twój kolejny pomysł. Gotowy do połączenia.