Cache channel
Cache channel menyimpan event terakhirnya dan memutar ulang event tersebut ke setiap subscriber baru. Klien yang terhubung setelah pembaruan dapat merender state terkini tanpa menunggu publish berikutnya.
Gunakan cache channel untuk nilai terkini seperti skor pertandingan, state perangkat, progres build, atau status pesanan. Subscription menyediakan state awal dan pembaruan selanjutnya.
Memberi nama cache channel
Nama channel mengaktifkan caching. Letakkan cache- di awal nama atau tepat setelah prefix tipe channel-nya.
| Nama | Di-cache | Subscription |
|---|---|---|
| cache-orders | ya | siapa pun yang memiliki app key |
| private-cache-orders | ya | backend Anda menandatangani untuk klien |
| presence-cache-lobby | ya | backend Anda menandatangani, member dilacak |
| orders-cache | tidak | siapa pun yang memiliki app key |
orders-cache bukan cache channel. Prefix cache- harus berada di awal nama setelah prefix private- atau presence-.
Semua hal lain tentang channel tidak berubah. Channel private-cache- melakukan otorisasi persis seperti private channel, dan channel presence-cache- tetap melacak member dan memicu event member seperti presence channel lainnya.
Berlangganan
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")
}Saat hit, event yang di-cache tiba setelah subscription berhasil. Event tersebut membawa nama event dan payload asli, sehingga handler yang sama memproses event yang di-cache maupun event langsung.
Saat miss, klien menerima bird:cache_miss pada channel tersebut. Bisa jadi channel belum pernah menerima publish atau event yang di-cache sudah kedaluwarsa.
Mengisi cache saat miss
Jika sebuah endpoint berlangganan ke realtime.cache_channels, miss juga sampai ke server Anda. Tangani webhook tersebut dengan membaca state terkini dan mempublikasikannya ke channel.
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)));Klien yang menyebabkan miss sudah berlangganan sebelum server Anda mempublikasikan event pengganti, sehingga klien tersebut menerima state baru. Alur ini juga mengisi cache kosong untuk subscriber pertamanya.
Isi cache dan retensi
Event yang dipublikasikan melalui API di-cache, termasuk publish tunggal dan batch. Event klien yang namanya dimulai dengan client- tidak di-cache.
Event yang di-cache dapat tetap tersedia hingga 30 menit, tetapi bisa kedaluwarsa lebih awal. Isi ulang channel yang jarang diperbarui dari webhook cache-miss daripada berasumsi cache masih aktif.
Setiap channel hanya menyimpan event terbaru. Jika Anda mempublikasikan score-updated lalu match-ended, subscriber baru hanya menerima match-ended. Gunakan satu nama event per cache channel, atau sertakan state lengkap di setiap payload.
Batasan cache
Cache channel hanya menyimpan event terbaru. Cache tidak menyimpan riwayat event. Klien yang melewatkan dua pembaruan saat offline menerima state terbaru tanpa event perantara. Simpan state yang persisten di database Anda. Setelah terhubung kembali, klien berlangganan ulang dan merender event yang di-cache jika masih tersedia. Lihat Mempublikasikan event untuk jaminan pengiriman.
Langkah selanjutnya
- Mempublikasikan event membahas publish dari server Anda, batching, dan broadcasting.
- Private channel dan Presence channel dapat digabungkan dengan cache- dalam nama yang sama.
- Mengkueri state channel membaca occupancy dan jumlah dari server Anda.
Sumber daya terkait
Lanjutkan dengan dokumentasi, panduan, dan contoh untuk topik ini. Sumber daya tersedia dalam bahasa Inggris.
Jelajahi kemampuannyaRealtimeIkuti jalur pembelajaranBuild your first integrationPanduan implementasiSend your first realtime event
Coba praktiknya dan dapatkan ringkasan implementasi