Cache-Channels
Ein Cache-Channel merkt sich sein letztes Event und spielt es jedem neuen Subscriber vor. Ein Client, der sich nach einem Update verbindet, kann den aktuellen Zustand rendern, ohne auf ein erneutes Publish zu warten.
Verwenden Sie Cache-Channels für aktuelle Werte wie einen Spielstand, Gerätestatus, Build-Fortschritt oder Bestellstatus. Das Subscription liefert den Anfangszustand und spätere Updates.
Einen Cache-Channel benennen
Der Channel-Name aktiviert das Caching. Setzen Sie cache- an den Anfang des Namens oder direkt nach dessen Channel-Typ-Präfix.
| Name | Gecacht | Subscription |
|---|---|---|
| cache-orders | ja | jeder mit dem App-Key |
| private-cache-orders | ja | Ihr Backend signiert für den Client |
| presence-cache-lobby | ja | Ihr Backend signiert, Members werden getrackt |
| orders-cache | nein | jeder mit dem App-Key |
orders-cache ist kein Cache-Channel. Das Präfix cache- muss nach einem eventuellen private-- oder presence--Präfix am Anfang des Namens stehen.
Alles andere am Channel bleibt unverändert. Ein private-cache--Channel autorisiert genau wie ein privater Channel, und ein presence-cache--Channel trackt weiterhin Members und löst Member-Events aus wie jeder andere Presence-Channel.
Subscriben
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")
}Bei einem Hit kommt das gecachte Event nach dem erfolgreichen Subscription an. Es trägt den ursprünglichen Event-Namen und Payload, sodass derselbe Handler gecachte und Live-Events verarbeitet.
Bei einem Miss empfängt der Client bird:cache_miss auf diesem Channel. Entweder hat der Channel noch nie ein Publish erhalten oder sein gecachtes Event ist abgelaufen.
Den Cache bei einem Miss befüllen
Wenn ein Endpoint realtime.cache_channels abonniert hat, erreicht der Miss auch Ihren Server. Verarbeiten Sie den Webhook, indem Sie den aktuellen Zustand lesen und ihn auf dem Channel publishen.
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)));Der Client, der den Miss ausgelöst hat, ist bereits subscribed, bevor Ihr Server das Ersatz-Event publisht, und empfängt so den neuen Zustand. Dieser Ablauf befüllt auch einen leeren Cache für dessen ersten Subscriber.
Cache-Inhalte und Aufbewahrung
Über die API veröffentlichte Events werden gecacht, einschließlich einzelner und Batch-Publishes. Client-Events, deren Namen mit client- beginnen, werden nicht gecacht.
Gecachte Events können bis zu 30 Minuten verfügbar bleiben, können aber auch früher ablaufen. Befüllen Sie selten aktualisierte Channels über den Cache-Miss-Webhook neu, anstatt davon auszugehen, dass der Cache noch warm ist.
Jeder Channel merkt sich nur sein letztes Event. Wenn Sie score-updated und dann match-ended publishen, empfängt ein neuer Subscriber nur match-ended. Verwenden Sie einen Event-Namen pro Cache-Channel oder fügen Sie den vollständigen Zustand in jedes Payload ein.
Cache-Einschränkungen
Ein Cache-Channel speichert nur das letzte Event. Er bewahrt keine Event-Historie auf. Ein Client, der zwei Updates im Offline-Zustand verpasst, empfängt den neuesten Zustand ohne das dazwischenliegende Event. Halten Sie dauerhaften Zustand in Ihrer Datenbank. Nach dem Reconnect abonniert der Client erneut und rendert das gecachte Event, falls eines verfügbar ist. Siehe Events veröffentlichen für Zustellungsgarantien.
Nächste Schritte
- Events veröffentlichen behandelt das Publishen von Ihrem Server, Batching und Broadcasting.
- Private Channels und Presence-Channels lassen sich mit cache- im selben Namen kombinieren.
- Channel-Zustand abfragen liest Belegung und Zähler von Ihrem Server.
Related resources
Continue with the documentation, guides and examples for this topic. Resources are in English.
Explore the capabilityRealtimeFollow the learning pathBuild your first integrationImplementation guideSend your first realtime event
Try the practice and get an implementation brief