Przesyłaj zdarzenia na żywo do połączonych przeglądarek i aplikacji mobilnych.
Wysyłaj na żywo aktualizacje zamówień, strumienie tokenów agentów AI, stan wspólnych pokojów i powiadomienia w aplikacji przez zarządzane kanały pub/sub, bez utrzymywania infrastruktury WebSocket. Kanały powstają na żądanie, gdy klient się subskrybuje, i zamykają się, gdy odłączy się ostatnie połączenie. Tryby publiczny, prywatny, presence, szyfrowany i cache są wbudowane w nazwę kanału.
channels.ts
Subskrybenci: 4Subskrybenci: 4const 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());
Połączenie 26896.319537
channels.ts
Subskrybenci: 4Subskrybenci: 4const 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());
Połączenie 26896.319537
channels.ts
Subskrybenci: 4Subskrybenci: 4const 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());
Połączenie 26896.319537
Określaj dostęp i zachowanie pokoju prefiksem kanału.
Twórz pokoje na żądanie, bez zakładania rejestru kanałów.
W API Realtime Bird Twoja aplikacja kieruje ruch na żywo, subskrybując nazwę kanału z rozróżnianiem wielkości liter o długości do 164 znaków, zamiast tworzyć pokoje z wyprzedzeniem w bazie danych. Prefiks nazwy wyznacza granicę bezpieczeństwa i stanu: nazwa bez prefiksu jest otwarta dla każdego odwiedzającego, private- wymaga autoryzacji subskrybenta przez Twój backend, presence- dodaje zweryfikowaną listę członków, a private-encrypted- szyfruje ładunki zdarzeń end-to-end. Do kanałów publicznych można dołączyć za pomocą Twojego publicznego klucza aplikacji, dlatego identyfikatory klientów i najemców umieszczaj w kanałach z prefiksami wymagającymi autoryzacji.
Dopasuj tryb kanału do tego, co przesyłasz.
Używaj tego samego połączenia WebSocket i tego samego wywołania publikacji z backendu dla transmisji publicznych, uwierzytelnionych kanałów klientów i wspólnych pokojów.
- 01
Kanały publiczne.
Transmituj wyniki sportowe na żywo, przyjazdy komunikacji, stany magazynowe lub statusy systemu do każdego odwiedzającego, bez wywoływania endpointu autoryzacji. Każdy, kto ma Twój publiczny klucz aplikacji, może subskrybować kanał, dlatego używaj ogólnych nazw tematów, takich jak scores-live, zamiast umieszczać identyfikatory klientów w nazwach kanałów publicznych.
- 02
Kanały prywatne.
Przesyłaj osobiste śledzenie zamówień, strumienie tokenów agentów AI, alerty rozliczeniowe i powiadomienia obszaru roboczego przez kanały private-. Gdy przeglądarka lub aplikacja mobilna subskrybuje kanał, Twój backend sprawdza sesję użytkownika i podpisuje subskrypcję sekretem aplikacji, więc nieautoryzowane połączenia nie mogą podsłuchiwać.
- 03
Kanały presence.
Twórz listy współpracowników dokumentu, paski widzów na żywo i dostępność kolejki wsparcia na kanałach presence-. Twój serwer autoryzuje każdego subskrybenta i dołącza zweryfikowany profil członka, dzięki czemu połączeni klienci otrzymują listę aktywnych członków pokoju oraz aktualizacje o dołączeniach i wyjściach w czasie rzeczywistym.
- 04
Kanały szyfrowane.
Chroń wrażliwe aktualizacje kont, powiadomienia finansowe lub poufne dane obszaru roboczego kanałami private-encrypted-. Twój serwer szyfruje każdy ładunek 32-bajtowym kluczem głównym, który przechowujesz, a przez krawędź Realtime trafia tylko szyfrogram. Nazwy kanałów i zdarzeń pozostają widoczne na potrzeby routingu.
- 05
Kanały cache.
Dodaj prefiks cache-, aby osoby dołączające później i ponownie łączący się klienci mobilni otrzymywali najnowszy stan od razu przy subskrypcji. Realtime odtwarza ostatnio opublikowane zdarzenie z TTL do 30 minut, a gdy cache jest pusty, wywołuje webhook cache-miss, aby Twój serwer mógł odtworzyć pełny stan.
Rozsyłaj zdarzenia z backendu do maksymalnie 100 kanałów jednym wywołaniem.
Publikuj aktualizacje z backendu lub procesów w tle standardowym żądaniem HTTP, a Bird zajmie się rozsyłaniem przez WebSocket do połączonych przeglądarek i urządzeń. Jedno wywołanie może wysłać zdarzenie do maksymalnie 100 kanałów (np. kanału meczu na żywo i jego odpowiednika z cache) albo zgrupować do 10 różnych zdarzeń dla różnych pokojów. Możesz pominąć połączenie karty, która wykonała akcję, gdy interfejs zastosował już aktualizację optymistyczną, zwrócić w odpowiedzi liczbę aktywnych połączeń lub członków i dołączyć klucz idempotencji, aby ponowne próby sieciowe nie dostarczały zduplikowanych zdarzeń.
// 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);
}
Przesyłaj wskaźniki pisania i kursory na żywo między uczestnikami.
Ulotne sygnały interfejsu, takie jak wskaźniki pisania, współrzędne kursora na żywo i podświetlenia zaznaczenia, nie muszą przechodzić przez Twój backend. Gdy włączysz zdarzenia klienta w aplikacji, autoryzowani subskrybenci w pokoju prywatnym lub presence mogą wysyłać zdarzenia z prefiksem client- bezpośrednio do innych uczestników pokoju, do 10 wiadomości na sekundę na połączenie. Wymóg kanału uwierzytelnionego sprawia, że anonimowi odwiedzający nie mogą nadawać za pomocą Twojego publicznego klucza aplikacji, a częste sygnały między uczestnikami nie obciążają Twoich serwerów aplikacji.
Łącz szybkie rozsyłanie zdarzeń z trwałym stanem aplikacji.
Publikacja zdarzenia kończy się sukcesem, gdy tylko krawędź Realtime przyjmie je do asynchronicznego rozesłania do aktualnie połączonych subskrybentów. Kanały na żywo przekazują aktualizacje w locie i nie przechowują kolejki wiadomości dla urządzeń offline, dlatego trwałe rekordy trzymaj w bazie danych, a połączone ekrany synchronizuj publikowanymi zdarzeniami lub kanałami cache. We wszystkich planach obowiązują przewidywalne limity: do 100 kanałów na publikację, 10 zdarzeń na partię, 10 KB na ładunek zdarzenia i nazwy kanałów do 164 znaków.
Więcej szczegółów w dokumentacji.
Z przeglądu Realtime dowiesz się, jak współdziałają kanały, członkowie i połączenia. Skorzystaj z przewodników o publikowaniu zdarzeń, aby rozsyłać do wielu kanałów i wykluczać optymistyczny interfejs, o kanałach cache, aby odtwarzać stan dla osób dołączających później i obsługiwać cache-miss, oraz o odpytywaniu stanu kanału, aby sprawdzać obłożenie pokojów z backendu.
Twórz dalej
z Realtime.
Łącz kanały pub/sub z listami osób online, kontrolą dostępu podpisywaną przez serwer i webhookami cyklu życia w backendzie.
Presence
Wyświetlaj listy osób online, deduplikuj otwarte karty według tożsamości użytkownika i wysyłaj wiadomości bezpośrednio do poszczególnych członków.
→Bezpieczeństwo
Autoryzuj subskrypcje pokojów prywatnych na serwerze, uwierzytelniaj połączenia i szyfruj wrażliwe ładunki end-to-end.
→Webhooki
Uruchamiaj procesy w backendzie, gdy kanał zostaje zajęty, opróżnia się, zmienia liczbę członków lub nie trafia w cache.
→Skaluj bez utraty kontroli.
Separate production and sandbox traffic into dedicated workspaces, scope API keys to the exact channels each service or agent needs, and track permission changes in the audit log.