Canaux cache
Un canal cache mémorise son dernier événement et le rejoue à chaque nouvel abonné. Un client qui se connecte après une mise à jour peut afficher l'état actuel sans attendre une nouvelle publication.
Utilisez les canaux cache pour des valeurs actuelles comme un score de match, un état d'appareil, une progression de build ou un statut de commande. L'abonnement fournit l'état initial puis les mises à jour suivantes.
Nommer un canal cache
Le nom du canal active la mise en cache. Placez cache- au début du nom ou directement après son préfixe de type de canal.
| Nom | En cache | Abonnement |
|---|---|---|
| cache-orders | oui | toute personne disposant de la clé d'app |
| private-cache-orders | oui | votre backend signe pour le client |
| presence-cache-lobby | oui | votre backend signe, membres suivis |
| orders-cache | non | toute personne disposant de la clé d'app |
orders-cache n'est pas un canal cache. Le préfixe cache- doit précéder le nom après tout préfixe private- ou presence-.
Tout le reste du canal est inchangé. Un canal private-cache- s'autorise exactement comme un canal privé, et un canal presence-cache- continue de suivre les membres et de déclencher les événements de membres comme tout autre canal de présence.
Abonnement
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");
});let bird = BirdRealtime(options: .init(appKey: "your-app-key", region: "us1"))
let match = bird.subscribe("cache-match-42")
match.bind("score-updated") { data in
render(data)
}
match.bind("bird:cache_miss") { _ in
print("nothing cached for this channel yet")
}val bird = BirdRealtime(BirdRealtimeOptions(appKey = "your-app-key", region = "us1"))
val match = bird.subscribe("cache-match-42")
match.bind("score-updated") { data ->
render(data)
}
match.bind("bird:cache_miss") {
println("nothing cached for this channel yet")
}En cas de hit, l'événement en cache arrive après la réussite de l'abonnement. Il porte le nom d'événement et le payload d'origine, de sorte que le même handler traite les événements en cache et les événements en direct.
En cas de miss, le client reçoit bird:cache_miss sur ce canal. Soit le canal n'a jamais reçu de publication, soit son événement en cache a expiré.
Remplir le cache en cas de miss
Si un endpoint s'abonne à realtime.cache_channels, le miss atteint également votre serveur. Traitez le webhook en lisant l'état actuel et en le publiant sur le canal.
await bird.realtime.publish(appId, {
event: "score-updated",
channels: ["cache-match-42"],
data: await currentScore(42),
});client.realtime.publish(
app_id,
event="score-updated",
channels=["cache-match-42"],
data=current_score(42),
)_, err := client.Realtime.Publish(context.Background(), appID, bird.RealtimePublishParams{
Event: "score-updated",
Channels: []string{"cache-match-42"},
Data: currentScore(42),
})$bird->realtime->publish($appId, (new RealtimePublish())
->setEvent('score-updated')
->setChannels(['cache-match-42'])
->setData(currentScore(42)));Le client à l'origine du miss est abonné avant que votre serveur ne publie l'événement de remplacement, il reçoit donc le nouvel état. Ce flux remplit également un cache vide pour son premier abonné.
Contenu du cache et rétention
Les événements publiés via le API sont mis en cache, y compris les publications unitaires et par lot. Les événements client dont le nom commence par client- ne sont pas mis en cache.
Les événements en cache peuvent rester disponibles jusqu'à 30 minutes, mais ils peuvent expirer plus tôt. Rechargez les canaux rarement mis à jour depuis le webhook de cache-miss au lieu de supposer que le cache est encore actif.
Chaque canal ne mémorise que son événement le plus récent. Si vous publiez score-updated puis match-ended, un nouvel abonné ne reçoit que match-ended. Utilisez un seul nom d'événement par canal cache, ou incluez l'état complet dans chaque payload.
Limitations du cache
Un canal cache ne stocke que l'événement le plus récent. Il ne conserve pas d'historique d'événements. Un client qui manque deux mises à jour hors ligne reçoit le dernier état sans l'événement intermédiaire. Conservez l'état durable dans votre base de données. Après reconnexion, le client se réabonne et affiche l'événement en cache s'il est encore disponible. Consultez Publication d'événements pour les garanties de livraison.
Étapes suivantes
- Publication d'événements couvre la publication depuis votre serveur, le traitement par lot et la diffusion.
- Canaux privés et Canaux de présence se combinent avec cache- dans le même nom.
- Interroger l'état d'un canal lit l'occupation et les compteurs depuis votre serveur.
Ressources associées
Poursuivez avec la documentation, les guides et les exemples sur ce sujet. Les ressources sont en anglais.
Explorer la fonctionnalitéRealtimeSuivre le parcours d'apprentissageBuild your first integrationGuide d'implémentationSend your first realtime event
Essayez la pratique et obtenez un guide d'implémentation