Canales de caché
Un canal de caché recuerda su último evento y lo reproduce para cada nuevo suscriptor. Un cliente que se conecta después de una actualización puede renderizar el estado actual sin esperar otra publicación.
Usa canales de caché para valores actuales como el marcador de un partido, el estado de un dispositivo, el progreso de una compilación o el estado de un pedido. La suscripción proporciona el estado inicial y las actualizaciones posteriores.
Nombrar un canal de caché
El nombre del canal activa el almacenamiento en caché. Coloca cache- al inicio del nombre o justo después de su prefijo de tipo de canal.
| Nombre | En caché | Suscripción |
|---|---|---|
| cache-orders | sí | cualquiera con la clave de la app |
| private-cache-orders | sí | tu backend firma por el cliente |
| presence-cache-lobby | sí | tu backend firma, miembros rastreados |
| orders-cache | no | cualquiera con la clave de la app |
orders-cache no es un canal de caché. El prefijo cache- debe encabezar el nombre después de cualquier prefijo private- o presence-.
Todo lo demás del canal permanece igual. Un canal private-cache- se autoriza exactamente como un canal privado, y un canal presence-cache- sigue rastreando miembros y disparando eventos de miembros como cualquier otro canal de presencia.
Suscripción
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 un acierto, el evento en caché llega después de que la suscripción se completa. Lleva el nombre y el payload del evento original, así que el mismo handler procesa los eventos en caché y los eventos en vivo.
En un fallo, el cliente recibe bird:cache_miss en ese canal. O el canal nunca recibió una publicación o su evento en caché expiró.
Llenar la caché en un fallo
Si un endpoint se suscribe a realtime.cache_channels, el fallo también llega a tu servidor. Maneja el webhook leyendo el estado actual y publicándolo en el 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)));El cliente que causó el fallo está suscrito antes de que tu servidor publique el evento de reemplazo, así que recibe el nuevo estado. Este flujo también llena una caché vacía para su primer suscriptor.
Contenido y retención de la caché
Los eventos publicados a través de API se almacenan en caché, incluidas las publicaciones individuales y por lotes. Los eventos de cliente cuyos nombres comienzan con client- no se almacenan en caché.
Los eventos en caché pueden permanecer disponibles hasta 30 minutos, pero pueden expirar antes. Repuebla los canales actualizados con poca frecuencia desde el webhook de fallo de caché en lugar de asumir que la caché sigue activa.
Cada canal recuerda solo su evento más reciente. Si publicas score-updated y luego match-ended, un nuevo suscriptor recibe solo match-ended. Usa un solo nombre de evento por canal de caché, o incluye el estado completo en cada payload.
Limitaciones de la caché
Un canal de caché almacena solo el evento más reciente. No conserva un historial de eventos. Un cliente que pierde dos actualizaciones mientras está desconectado recibe el último estado sin el evento intermedio. Mantén el estado persistente en tu base de datos. Después de reconectarse, el cliente se vuelve a suscribir y renderiza el evento en caché si todavía está disponible. Consulta Publicar eventos para las garantías de entrega.
Próximos pasos
- Publicar eventos cubre la publicación desde tu servidor, el envío por lotes y la difusión.
- Canales privados y Canales de presencia se combinan con cache- en el mismo nombre.
- Consultar el estado de un canal lee la ocupación y los conteos desde tu servidor.
Recursos relacionados
Continúa con la documentación, guías y ejemplos sobre este tema. Los recursos están en inglés.
Explorar la funcionalidadRealtimeSeguir la ruta de aprendizajeBuild your first integrationGuía de implementaciónSend your first realtime event
Prueba el ejercicio y obtén un resumen de implementación