Realtime WebSocket

Postgres Changes (CDC), Presence (utilisateurs connectés), Broadcast (pub/sub éphémère). Plus de 100 000 connexions WebSocket simultanées par compute.

Realtime WebSocket

Le service Realtime du Pool C permet aux apps clientes de s'abonner aux changements de base de données et de communiquer entre elles en temps réel via WebSocket. Trois modes : Postgres Changes (CDC via logical replication), Presence (tracking des utilisateurs connectés), Broadcast (pub/sub de messages éphémères). Une instance Realtime par compute peut maintenir plus de 100 000 connexions WebSocket simultanées.

Quand l'utiliser — quand non

Idéal pour

  • Notifications temps réel d'événements DB (todo créé, message envoyé, etc.)
  • Indicateurs « en ligne », « en train de taper »
  • Curseurs collaboratifs, jeux multijoueurs légers
  • Chat applicatif, co-édition de documents

Pas adapté

  • Streaming binaire haut débit (préférer un service dédié)
  • Voix / vidéo (préférer WebRTC)
  • Transactions financières temps réel critiques

Connexion WebSocket

wss://wzfbhd.runtime.di2amp.com/realtime/v1/websocket?apikey=$ANON_KEY&vsn=1.0.0

Mode 1 — Postgres Changes

Reçoit en temps réel les INSERT, UPDATE, DELETE sur les tables PostgreSQL. Repose sur la logical replication : un slot par projet capture le WAL et le transmet au service Realtime.

# Souscription protocole Phoenix Channels (JSON over WebSocket)
{
  "topic": "realtime:public:todos",
  "event": "phx_join",
  "payload": {
    "config": {
      "postgres_changes": [
        { "event": "*", "schema": "public", "table": "todos" }
      ]
    }
  },
  "ref": "1"
}

# Événement reçu à chaque changement
{
  "event": "INSERT",
  "payload": {
    "schema": "public", "table": "todos",
    "new": { "id": 42, "title": "Acheter du pain", ... },
    "old": null
  }
}

Filtre par valeur de colonne (e.g. filter: "user_id=eq.<uuid>") pour ne recevoir que les events des rows pertinents.

Mode 2 — Presence

Tracking des utilisateurs connectés à un canal. Chaque client annonce sa présence avec des données personnalisées (nom, position curseur, statut). Les events sync, join, leave notifient les changements de présence à tous les abonnés.

Mode 3 — Broadcast

Messages éphémères (non persistés) pub/sub à tous les abonnés d'un canal. Cas d'usage : positions de curseurs, deltas de texte collaboratif, notifications inter-clients sans aller-retour DB.

# Envoyer un message broadcast
{
  "topic": "realtime:document-editor",
  "event": "broadcast",
  "payload": {
    "type": "broadcast",
    "event": "cursor-move",
    "payload": { "user_id": "abc", "x": 120, "y": 340 }
  }
}

RLS appliquée aux Postgres Changes

Les policies RLS PostgreSQL s'appliquent aux events Realtime : un utilisateur ne reçoit que les events des rows qu'il aurait le droit de SELECT via l'API REST. Un user A ne reçoit pas les events des rows de l'user B.

Reconnexion automatique

Le client SDK gère la reconnexion en cas de coupure réseau. Les abonnements Postgres Changes sont re-souscris automatiquement, les états Presence republiés. Aucun code spécifique nécessaire pour gérer les déconnexions transitoires.

Limites par plan

PlanMessages Realtime / moisConnexions simultanées max
Free2 millions200
Pro10 millions2 000
Business100 millions20 000
Entrepriseillimitéillimité
MétriqueCible
Connexions WebSocket par compute> 100 000
Latence event → réception (p50)< 100 ms
Latence event → réception (p99)< 500 ms
Channels max par projet10 000
Abonnés max par channel10 000

Sécurité et isolation

Canaux isolés par projet. Un canal du projet wzfbhd ne reçoit jamais les messages d'un autre projet. RLS PostgreSQL appliquée aux Postgres Changes.

Pour aller plus loin

Tarification associée

Quota inclus selon le plan, facturation à l'usage au-delà. Voir tarifs.