Un canale è un nome. Niente da configurare.
Un canale esiste nel momento in cui qualcosa si sottoscrive e scompare quando l'ultima connessione se ne va. Il nome determina il tipo: public per tutto ciò che un visitatore può leggere, private per tutto ciò che riguarda un singolo cliente, presence per una stanza con un elenco di presenze e un prefisso cache per lo stato di cui un nuovo arrivato ha bisogno immediatamente.
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());
Il prefisso è la configurazione.
Non c'è nessun registro di canali da tenere allineato.
I canali sono il modello di indirizzamento della Bird Realtime API. Non ne crei mai uno: ti sottoscrivi a un nome, e i primi tre caratteri di quel nome indicano all'edge come trattarlo. Un nome senza prefisso è pubblico. private- chiede al tuo backend di approvare ogni sottoscrizione. presence- fa lo stesso e associa un'identità. private-encrypted- cifra il payload con una chiave che Bird non possiede mai. I nomi accettano fino a 164 caratteri, sono case-sensitive e sono l'unica parte di un canale su cui vale la pena riflettere, perché un nome pubblico è visibile a chiunque possieda la app key.
Cinque tipi di stanza.
Stesso protocollo, stesso client, stessa chiamata di publish. Cambia solo il nome.
- 01
Canali pubblici.
Nessun endpoint di autorizzazione, nessuna registrazione. Chiunque possieda la app key può sottoscriversi, il che li rende adatti a risultati di build, punteggi live, informazioni sui voli o una pagina di stato, e inadatti a qualsiasi cosa relativa a un singolo cliente. Tieni gli identificatori fuori dal nome: orders non rivela nulla, orders-user-4821 rivela che l'utente 4821 esiste.
- 02
Canali privati.
Un nome private- instrada la sottoscrizione attraverso il tuo endpoint, che verifica la sessione e firma il connection id e il nome del canale con l'app secret. Le tue regole, la tua sessione, il tuo 403. L'edge verifica la firma e nient'altro raggiunge il canale.
- 03
Canali di presenza.
Autorizzazione da canale privato più un'identità, così ogni sottoscrittore riceve l'elenco dei membri e viene informato di arrivi e partenze. È l'unico tipo di canale con un roster.
- 04
Canali cifrati.
Un canale private-encrypted- trasporta payload che il tuo server cifra con una master key a 32 byte che non compare mai in una richiesta Realtime. L'edge e tutto ciò che sta tra esso e il browser vedono testo cifrato. I nomi dei canali e degli eventi restano in chiaro, quindi scegli nomi che non rivelino ciò che stai proteggendo.
- 05
Canali cache.
Anteponi cache- al nome, dopo qualsiasi prefisso di tipo, e il canale memorizza l'ultimo evento pubblicato via API e lo riproduce a ogni nuovo sottoscrittore. La sottoscrizione funge anche da fetch dello stato iniziale. Due vincoli da considerare nella progettazione: viene conservato solo l'evento più recente e può scadere prima del limite di 30 minuti, quindi inserisci l'intero stato in ogni payload e ripopola dal webhook di cache-miss anziché dare per scontato che la cache sia calda.
Un singolo publish, fino a cento canali.
Il publish è una normale chiamata REST dal tuo server. Indica fino a 100 canali in una singola richiesta e l'edge distribuisce l'evento a tutti. Un batch trasporta fino a 10 eventi non correlati, ciascuno verso il proprio canale. Passa il connection id del client come exclude_connection_id e la tab che ha già applicato la modifica localmente viene esclusa. Richiedi il conteggio delle connessioni o dei membri con include e la risposta indica lo stato di ogni canale al momento del publish. Riprova con la stessa idempotency key e non consegnerai due volte.
// 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);
}
I client possono comunicare direttamente tra loro.
Un indicatore di digitazione o la posizione di un cursore non hanno bisogno di passare dalla tua API. Abilita i client events sull'app e un client sottoscritto può inviare un evento chiamato client-something direttamente agli altri nel canale, con un limite di 10 al secondo per connessione. Funzionano solo su canali privati e di presenza, ed è intenzionale: la app key è nel tuo codice, quindi l'autorizzazione è ciò che rende un client abbastanza affidabile da trasmettere. Tratta ciò che arriva come un segnale, mai come stato autorevole, perché l'edge non valida il payload.
Cosa ricorda e cosa non ricorda un canale.
Un publish ritorna non appena l'edge ha accettato l'evento. La consegna è asincrona, non esiste una conferma per singolo client e un client che si disconnette durante la consegna non riceverà di nuovo l'evento alla riconnessione. Questo è il contratto reale, ed è il motivo per cui lo stato persistente appartiene al tuo database e gli eventi annunciano che è cambiato. I limiti sono identici su ogni piano: 100 canali per publish, 10 eventi per batch, 10 KB per payload, nomi di canale di 164 caratteri.
Approfondisci nella documentazione.
La panoramica di Realtime definisce canali, membri e connessioni in un'unica pagina. Pubblicare eventi copre broadcast, batch ed esclusione, canali cache spiega il replay e interrogare lo stato del canale è la lettura lato server per occupancy e conteggi.
Il resto di Realtime
Un'app, una coppia di chiavi. Esplora le altre funzionalità.
Scala senza
perdere il controllo.
Organizza i team in spazi di lavoro, controlla l'accesso alle API e traccia le modifiche tramite log di audit.
Registro di audit
Produzione- Workspace
- Produzione
- Risorsa
- Agente di invio
- Accesso in letturaLettura e scrittura