Aurabase Logo
aurabasedocs
docsServicesRealtime

Realtime

WebSocket, SSE et NATS auto-négociés. Presence, replay, ordering garanti, backpressure. 1M connexions par POP, fanout sub-15ms p99 entre régions.

7 min de lecture·Niveau intermédiaire·Révisé le 15 avr. 2026
#
Vue d’ensemble

Sync, presence, broadcast

§ 01

Le service aura-realtime diffuse trois types d'événements : CDC Postgres (INSERT/UPDATE/DELETE filtrés par RLS), Presence (qui est en ligne) et Broadcast (custom events indépendants de la base). Tous passent par le même SDK via .channel().

Un canal est identifié par un nom arbitraire (sensors:live, doc:42, room:abc). Les messages sont ordonnés par canal, dédupliqués par message_id, et garantis exactly-once à l'intérieur d'un même canal.

Info
Les abonnements héritent des policies RLSde la base. Un client ne peut s'abonner qu'aux changements qu'il peut lire — le filtre est évalué côté serveur sur le WAL, pas côté client.
#
Modèle mental

Une connexion, N canaux

§ 02

Le SDK maintient une seule connexion TCP multiplexée entre le client et le POP le plus proche. Vous pouvez ouvrir 100 canaux sans ouvrir 100 sockets.

schema
TEXT
┌──────────────────┐
Client (WS) ────▶ │ aura-realtime │
│ ─ CDC listener │
│ ─ Presence CRDT │
│ ─ Broadcast hub │
└────────┬─────────┘
│ NATS JetStream
┌────────────────────┴────────────────────┐
▼ ▼ ▼
aura-db WAL Presence state autres POPs
Astuce
Les événements sont partitionnés par hash consistant. Un canal vit toujours sur le même POP, mais sa réplication vers les autres POPs est garantie en moins de 15ms p99.
#
Primitives

Six capacités natives

§ 03
Trois transports
WebSocket d’abord, SSE en fallback, NATS inter-services. Auto-négocié.
CDC Postgres
Changes WAL filtrés côté serveur, RLS appliquée au flux.
Presence API
Qui est en ligne, état arbitraire, join/leave events.
Multiplex
1 000 canaux sur 1 connexion TCP, zéro coût réseau supplémentaire.
Event replay
Rejoue les 60 derniers événements à la reconnection.
Cursors collab
Primitive native, throttle adaptatif 60 FPS, interpolation client.
#
Exemples

Quatre patterns essentiels

§ 04
components/LiveDevices.tsxTYPESCRIPT
const channel = aura.channel('devices:live')
.on('postgres_changes', {
event: '*',
schema: 'public',
table: 'devices',
filter: `tenant_id=eq.${tid}`,
}, ({ new: row }) => render(row))
.subscribe()
Nettoyage obligatoire
Appelez toujours channel.unsubscribe() au démontage. En React, faites-le dans le cleanup de useEffect — le hook useChannel ci-dessus le fait pour vous.
#
Garanties

Ce qu’on promet, ce qu’on ne promet pas

§ 05
✓ GARANTI
  • Ordering par canal
  • Exactly-once par message_id dans un canal
  • Fanout p99 < 15ms cross-region
  • Reconnexion auto avec replay 60s
  • Backpressure explicite (drop policy configurable)
✗ NON GARANTI
  • Ordering cross-canal
  • Exactly-once cross-canal (at-least-once)
  • Latence sub-ms (< 15ms p99 est notre plancher)
  • Replay au-delà de 60s (utilisez un journal Postgres)
Dernière mise à jour · 15 avr. 2026