Trasmetti eventi in tempo reale a browser e app mobili connessi.
Invia aggiornamenti degli ordini in tempo reale, flussi di token degli agenti AI, stato delle stanze collaborative e notifiche in-app tramite canali pub/sub gestiti, senza gestire un'infrastruttura WebSocket. I canali si attivano su richiesta quando un client si iscrive e si chiudono quando l'ultima connessione esce, con modalità pubblica, privata, di presenza, crittografata e con cache definite nel nome del canale.
channels.ts
4 iscritti4 iscritticonst 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());
Connessione 26896.319537
channels.ts
4 iscritti4 iscritticonst 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());
Connessione 26896.319537
channels.ts
4 iscritti4 iscritticonst 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());
Connessione 26896.319537
Definisci l'accesso e il comportamento delle stanze con il prefisso del canale.
Crea stanze su richiesta senza predisporre un registro dei canali.
Con la API Realtime di Bird, la tua applicazione instrada il traffico in tempo reale iscrivendosi a un nome di canale sensibile alle maiuscole, lungo fino a 164 caratteri, invece di creare prima le stanze in un database. Il prefisso del nome definisce il confine di sicurezza e di stato: un nome senza prefisso è aperto a qualsiasi visitatore, private- richiede che il tuo backend autorizzi l'iscritto, presence- aggiunge un elenco di membri verificati e private-encrypted- crittografa end-to-end i payload degli eventi. Poiché ai canali pubblici si può accedere con la chiave pubblica della tua app, usa prefissi autorizzati per gli identificativi di clienti e tenant.
Scegli la modalità del canale in base a ciò che trasmetti.
Usa la stessa connessione WebSocket e la stessa chiamata di pubblicazione dal backend per broadcast pubblici, feed autenticati dei clienti e stanze collaborative.
- 01
Canali pubblici.
Trasmetti risultati sportivi in diretta, arrivi dei mezzi pubblici, ticker dell'inventario o aggiornamenti sullo stato del sistema a qualsiasi visitatore, senza passare da un endpoint di autorizzazione. Poiché chiunque abbia la chiave pubblica della tua app può iscriversi, usa nomi di argomento generici come scores-live invece di inserire ID dei clienti nei nomi dei canali pubblici.
- 02
Canali privati.
Trasmetti tracker personali degli ordini, flussi di token degli agenti AI, avvisi di fatturazione e notifiche dello spazio di lavoro su canali private-. Quando un browser o un'app mobile si iscrive, il tuo backend verifica la sessione dell'utente e firma l'iscrizione con il secret della tua app, così le connessioni non autorizzate non possono ascoltare.
- 03
Canali di presenza.
Crea elenchi di partecipanti a documenti collaborativi, barre degli spettatori in diretta e disponibilità delle code di supporto su canali presence-. Il tuo server autorizza ogni iscritto e allega un profilo membro verificato, così i client connessi ricevono l'elenco attivo della stanza e gli aggiornamenti in tempo reale su ingressi e uscite.
- 04
Canali cifrati.
Proteggi aggiornamenti sensibili degli account, notifiche finanziarie o dati riservati dello spazio di lavoro con canali private-encrypted-. Il tuo server sigilla ogni payload con una chiave master da 32 byte che custodisci tu e consegna il testo cifrato tramite l'edge Realtime, lasciando visibili i nomi di canali ed eventi per l'instradamento.
- 05
Canali cache.
Fornisci lo stato più recente a chi si unisce in ritardo e ai client mobili che si riconnettono, subito al momento dell'iscrizione, aggiungendo il prefisso cache-. Realtime riproduce l'ultimo evento pubblicato con un TTL fino a 30 minuti e invia un webhook cache-miss quando la cache è vuota, così il tuo server può ripopolare uno snapshot completo dello stato.
Distribuisci eventi dal backend su un massimo di 100 canali con una sola chiamata.
Pubblica aggiornamenti dal tuo backend o dai worker in background con una normale richiesta HTTP e lascia che Bird gestisca il fan-out WebSocket verso browser e dispositivi connessi. Una singola chiamata può trasmettere un evento a un massimo di 100 canali (ad esempio il feed di una partita in diretta e il suo gemello con cache) o raggruppare fino a 10 eventi distinti per stanze diverse. Puoi escludere la connessione della scheda che ha eseguito l'azione quando la tua UI ha già applicato un aggiornamento ottimistico, ricevere nella risposta di pubblicazione il numero di connessioni o membri attivi e allegare una chiave di idempotenza, così i nuovi tentativi di rete non consegnano eventi duplicati.
// 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);
}
Trasmetti indicatori di digitazione e cursori in tempo reale tra peer.
I segnali effimeri dell'interfaccia, come indicatori di digitazione, coordinate del puntatore in tempo reale ed evidenziazioni della selezione attiva, non devono passare dal tuo backend. Quando abiliti gli eventi client nella tua app, gli iscritti autorizzati in una stanza privata o di presenza possono trasmettere eventi con prefisso client- direttamente agli altri partecipanti della stanza, fino a 10 messaggi al secondo per connessione. Richiedere un canale autenticato impedisce ai visitatori anonimi di trasmettere con la chiave pubblica della tua app e tiene i segnali peer ad alta frequenza lontani dai tuoi server applicativi.
Abbina il fan-out di eventi a bassa latenza a uno stato applicativo persistente.
La pubblicazione di un evento riesce non appena l'edge Realtime lo accetta per il fan-out asincrono verso gli iscritti connessi in quel momento. Poiché i canali in tempo reale inviano gli aggiornamenti al volo invece di conservare una coda di messaggi per i dispositivi offline, salva i dati persistenti nel tuo database e usa gli eventi pubblicati o i canali con cache per sincronizzare gli schermi connessi. Su tutti i piani valgono limiti prevedibili: fino a 100 canali per pubblicazione, 10 eventi per batch, 10 KB per payload di evento e nomi di canale di 164 caratteri.
Approfondisci nella documentazione.
Leggi la panoramica di Realtime per capire come si collegano canali, membri e connessioni. Segui le guide sulla pubblicazione di eventi per il fan-out su più canali e l'esclusione della UI ottimistica, sui canali con cache per la riproduzione dello stato a chi si unisce in ritardo e il recupero dopo un cache-miss, e sulla consultazione dello stato dei canali per verificare dal backend l'occupazione delle stanze in tempo reale.
Continua a sviluppare
con Realtime.
Combina i canali pub/sub con elenchi di utenti online in tempo reale, controlli di accesso firmati dal server e webhook sul ciclo di vita per il backend.
Presenza
Mostra elenchi di utenti online in tempo reale, deduplica le schede aperte in base all'identità dell'utente e invia messaggi diretti ai singoli membri.
→Sicurezza
Autorizza sul tuo server le iscrizioni alle stanze private, autentica le connessioni e crittografa end-to-end i payload sensibili.
→Webhook
Avvia flussi di lavoro nel backend quando un canale viene occupato, si svuota, cambia numero di membri o non trova dati in cache.
→Scala senza perdere il controllo.
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.