Sign inGet started

Cache-kanalen

Een cache-kanaal onthoudt zijn laatste event en speelt het opnieuw af voor elke nieuwe abonnee. Een client die na een update verbinding maakt, kan de huidige staat renderen zonder op een nieuwe publish te wachten.
Gebruik cache-kanalen voor actuele waarden zoals een wedstrijdscore, apparaatstatus, buildvoortgang of orderstatus. Het abonnement levert de initiële staat en latere updates.

Een cache-kanaal benoemen

De kanaalnaam schakelt caching in. Zet cache- aan het begin van de naam of direct na het kanaaltype-prefix.
NaamGecachetAbonnement
cache-ordersjaiedereen met de app-key
private-cache-ordersjaje backend tekent voor de client
presence-cache-lobbyjaje backend tekent, leden bijgehouden
orders-cacheneeiedereen met de app-key
orders-cache is geen cache-kanaal. Het cache--prefix moet aan het begin van de naam staan, na een eventueel private-- of presence--prefix.
Al het andere aan het kanaal blijft ongewijzigd. Een private-cache--kanaal autoriseert precies zoals een privékanaal, en een presence-cache--kanaal volgt nog steeds leden en verstuurt ledenevents zoals elk ander presence-kanaal.

Abonneren

const bird = new BirdRealtime({ appKey: "your-app-key", region: "us1" });

const match = bird.subscribe("cache-match-42");

match.bind("score-updated", (data) => {
  render(data);
});

match.bind("bird:cache_miss", () => {
  console.log("nothing cached for this channel yet");
});
Bij een hit arriveert het gecachete event nadat het abonnement is gelukt. Het bevat de oorspronkelijke eventnaam en payload, zodat dezelfde handler gecachete en live events verwerkt.
Bij een miss ontvangt de client bird:cache_miss op dat kanaal. Het kanaal heeft nog nooit een publish ontvangen, of het gecachete event is verlopen.

De cache vullen bij een miss

Als een endpoint zich abonneert op realtime.cache_channels, bereikt de miss ook je server. Verwerk de webhook door de huidige staat op te halen en naar het kanaal te publishen.
await bird.realtime.publish(appId, {
  event: "score-updated",
  channels: ["cache-match-42"],
  data: await currentScore(42),
});
De client die de miss veroorzaakte, is geabonneerd voordat je server het vervangende event publisht, en ontvangt dus de nieuwe staat. Deze flow vult ook een lege cache voor de eerste abonnee.

Cache-inhoud en retentie

Events die via de API worden gepublisht, worden gecachet, inclusief enkele en batch-publishes. Client-events waarvan de naam begint met client- worden niet gecachet.
Gecachete events kunnen tot 30 minuten beschikbaar blijven, maar ze kunnen eerder verlopen. Vul weinig bijgewerkte kanalen opnieuw vanuit de cache-miss-webhook in plaats van aan te nemen dat de cache nog warm is.
Elk kanaal onthoudt alleen het meest recente event. Als je score-updated publisht en daarna match-ended, ontvangt een nieuwe abonnee alleen match-ended. Gebruik één eventnaam per cache-kanaal, of neem de volledige staat op in elke payload.

Beperkingen van cache-kanalen

Een cache-kanaal slaat alleen het meest recente event op. Het bewaart geen eventgeschiedenis. Een client die twee updates mist terwijl hij offline is, ontvangt de laatste staat zonder het tussenliggende event. Bewaar duurzame staat in je database. Na opnieuw verbinden abonneert de client zich opnieuw en rendert het gecachete event als er nog een beschikbaar is. Zie Events publiceren voor leveringsgaranties.

Volgende stappen

Gerelateerde bronnen

Ga verder met de documentatie, gidsen en voorbeelden voor dit onderwerp. De bronnen zijn in het Engels.

Probeer de oefening en ontvang een implementatieoverzicht