Kanały cache
Kanał cache zapamiętuje swoje najnowsze zdarzenie i odtwarza je każdemu nowemu subskrybentowi. Klient, który połączy się po aktualizacji, może wyrenderować bieżący stan bez czekania na kolejną publikację.
Używaj kanałów cache do bieżących wartości, takich jak wynik meczu, stan urządzenia, postęp kompilacji czy status zamówienia. Subskrypcja dostarcza stan początkowy i późniejsze aktualizacje.
Nazwij kanał cache
Nazwa kanału włącza buforowanie. Umieść cache- na początku nazwy lub bezpośrednio po prefiksie typu kanału.
| Nazwa | Cache | Subskrypcja |
|---|---|---|
| cache-orders | tak | każdy posiadający klucz aplikacji |
| private-cache-orders | tak | Twój backend podpisuje za klienta |
| presence-cache-lobby | tak | Twój backend podpisuje, członkowie śledzeni |
| orders-cache | nie | każdy posiadający klucz aplikacji |
orders-cache nie jest kanałem cache. Prefiks cache- musi znajdować się na początku nazwy, po ewentualnym prefiksie private- lub presence-.
Wszystko inne w kanale pozostaje bez zmian. Kanał private-cache- autoryzuje się dokładnie tak jak kanał prywatny, a kanał presence-cache- nadal śledzi członków i emituje zdarzenia członkowskie jak każdy inny kanał presence.
Subskrypcja
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")
}Przy trafieniu zbuforowane zdarzenie dociera po pomyślnej subskrypcji. Niesie oryginalną nazwę zdarzenia i payload, więc ten sam handler przetwarza zdarzenia z cache i na żywo.
Przy chybieniu klient otrzymuje bird:cache_miss na tym kanale. Kanał albo nigdy nie otrzymał publikacji, albo jego zbuforowane zdarzenie wygasło.
Uzupełnianie cache przy chybieniu
Jeśli endpoint subskrybuje realtime.cache_channels, chybienie dociera również do Twojego serwera. Obsłuż webhook, odczytując bieżący stan i publikując go na kanale.
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)));Klient, który spowodował chybienie, jest zasubskrybowany zanim Twój serwer opublikuje zdarzenie zastępcze, więc otrzyma nowy stan. Ten przepływ wypełnia też pusty cache dla pierwszego subskrybenta.
Zawartość cache i czas przechowywania
Zdarzenia opublikowane przez API są buforowane, w tym pojedyncze i wsadowe publikacje. Zdarzenia klienckie, których nazwy zaczynają się od client-, nie są buforowane.
Zbuforowane zdarzenia mogą pozostawać dostępne do 30 minut, ale mogą wygasnąć wcześniej. Uzupełniaj rzadko aktualizowane kanały z webhooka cache-miss zamiast zakładać, że cache jest nadal aktywny.
Każdy kanał zapamiętuje tylko swoje najnowsze zdarzenie. Jeśli opublikujesz score-updated, a następnie match-ended, nowy subskrybent otrzyma tylko match-ended. Używaj jednej nazwy zdarzenia na kanał cache lub dołączaj kompletny stan w każdym payloadzie.
Ograniczenia cache
Kanał cache przechowuje tylko najnowsze zdarzenie. Nie zachowuje historii zdarzeń. Klient, który przegapi dwie aktualizacje w trybie offline, otrzymuje najnowszy stan bez pośredniego zdarzenia. Trwały stan przechowuj w swojej bazie danych. Po ponownym połączeniu klient ponownie subskrybuje i renderuje zbuforowane zdarzenie, jeśli jest nadal dostępne. Zobacz Publikowanie zdarzeń, aby poznać gwarancje dostarczenia.
Następne kroki
- Publikowanie zdarzeń obejmuje publikowanie z Twojego serwera, wsadowe wysyłanie i rozgłaszanie.
- Kanały prywatne i kanały presence łączą się z cache- w tej samej nazwie.
- Odpytywanie stanu kanału odczytuje zajętość i liczniki z Twojego serwera.
Powiązane zasoby
Kontynuuj z dokumentacją, przewodnikami i przykładami dotyczącymi tego tematu. Zasoby są w języku angielskim.
Poznaj możliwościRealtimePodążaj ścieżką naukiBuild your first integrationPrzewodnik wdrożeniowySend your first realtime event
Wypróbuj ćwiczenie i uzyskaj brief wdrożeniowy