Een kanaal is een naam. Niets in te richten.
Een channel bestaat zodra iets erop abonneert en verdwijnt wanneer de laatste verbinding vertrekt. De naam bepaalt het type: public voor alles wat een bezoeker mag lezen, private voor alles wat bij één klant hoort, presence voor een ruimte met een deelnemerslijst, en een cache-prefix voor state die een late deelnemer direct nodig heeft.
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());
De prefix is de configuratie.
Er is geen channelregister om bij te houden.
Channels zijn het adresseringsmodel van de Bird Realtime API. Je maakt er nooit een aan: je abonneert op een naam, en de eerste drie tekens van die naam vertellen de edge hoe hij ermee moet omgaan. Een naam zonder prefix is public. private- vraagt je backend om elk abonnement goed te keuren. presence- doet hetzelfde en koppelt er een identiteit aan. private-encrypted- versleutelt de payload met een sleutel die Bird nooit bezit. Namen zijn maximaal 164 tekens, hoofdlettergevoelig, en het enige onderdeel van een channel waar je goed over moet nadenken, want een public naam is zichtbaar voor iedereen met de app key.
Vijf soorten ruimten.
Hetzelfde protocol, dezelfde client, dezelfde publish-aanroep. De naam is wat verschilt.
- 01
Public channels.
Geen autorisatie-endpoint, geen registratie. Iedereen met de app key kan abonneren, wat ze geschikt maakt voor buildresultaten, live scores, vluchtinformatie of een statuspagina, en ongeschikt voor alles wat bij één klant hoort. Houd identifiers uit de naam: orders onthult niets, orders-user-4821 onthult dat user 4821 bestaat.
- 02
Private channels.
Een private-naam stuurt het abonnement via je eigen endpoint, dat de sessie controleert en de connection id en channelnaam ondertekent met het app secret. Jouw regels, jouw sessie, jouw 403. De edge verifieert de handtekening en niets anders bereikt het channel.
- 03
Presence channels.
Private-channel-autorisatie plus een identiteit, zodat elke abonnee de deelnemerslijst krijgt en op de hoogte blijft van binnenkomsten en vertrekken. Dit is het enige channeltype met een deelnemerslijst.
- 04
Versleutelde channels.
Een private-encrypted-channel draagt payloads die je server versleutelt met een 32-byte master key die nooit in een Realtime-verzoek verschijnt. De edge en alles ertussen en de browser zien ciphertext. Channel- en eventnamen blijven onversleuteld, dus kies namen die niet onthullen wat je beschermt.
- 05
Cache channels.
Begin de naam met cache-, na een eventuele type-prefix, en het channel onthoudt het laatst via de API gepubliceerde event en speelt het af voor elke nieuwe abonnee. Het abonnement fungeert meteen als de initiële state-fetch. Twee beperkingen om rekening mee te houden: alleen het meest recente event wordt bewaard, en het kan verlopen vóór het plafond van 30 minuten. Zet dus de volledige state in elke payload en vul opnieuw vanuit de cache-miss-webhook in plaats van aan te nemen dat de cache warm is.
Eén publish, tot honderd channels.
Publiceren is een gewone REST-aanroep vanuit je server. Noem tot 100 channels in één verzoek en de edge distribueert het event naar allemaal. Een batch bevat tot 10 ongerelateerde events, elk naar een eigen channel. Geef de connection id van de handelende client mee als exclude_connection_id en het tabblad dat de wijziging al lokaal heeft toegepast wordt overgeslagen. Vraag met include om connection- of membertellingen en het antwoord geeft je de status van elk channel op het moment van publiceren. Probeer opnieuw met dezelfde idempotency key en je levert niet dubbel af.
// 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);
}
Clients kunnen rechtstreeks met elkaar communiceren.
Een typindicator of cursorpositie hoeft je API niet te bezoeken. Schakel client events in op de app en een geabonneerde client kan een event met de naam client-iets rechtstreeks naar de anderen in het channel sturen, met een limiet van 10 per seconde per verbinding. Ze werken alleen op private en presence channels, en dat is bewust: de app key staat in je pagina, dus autorisatie is wat een client betrouwbaar genoeg maakt om te broadcasten. Behandel wat binnenkomt als signaal, nooit als gezaghebbende state, want de edge valideert de payload niet.
Wat een channel wel en niet onthoudt.
Een publish keert terug zodra de edge het event heeft geaccepteerd. Bezorging is asynchroon, er is geen ontvangstbevestiging per client, en een client die halverwege de bezorging wegvalt krijgt het event bij reconnect niet opnieuw. Dat is het eerlijke contract, en daarom hoort duurzame state in je database en kondigen events aan dat die is gewijzigd. Limieten zijn op elk plan hetzelfde: 100 channels per publish, 10 events per batch, 10 KB per payload, 164 tekens per channelnaam.
Duik dieper in de docs.
Het Realtime-overzicht definieert channels, members en connections op één pagina. Events publiceren behandelt broadcast, batch en exclusion, cache channels legt de replay uit, en channelstatus opvragen is de serverside read voor bezetting en tellingen.
De rest van Realtime
Eén app, één sleutelpaar. Ontdek de andere mogelijkheden.
Schaal op zonder
controle te verliezen.
Organiseer teams in werkruimtes, beheer API-toegang en traceer wijzigingen via auditlogs.
Auditlog
Productie- Werkruimte
- Productie
- Resource
- Verzendagent
- LeestoegangLezen en schrijven