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
| Plan | Messages Realtime / mois | Connexions simultanées max |
|---|---|---|
| Free | 2 millions | 200 |
| Pro | 10 millions | 2 000 |
| Business | 100 millions | 20 000 |
| Entreprise | illimité | illimité |
| Métrique | Cible |
|---|---|
| Connexions WebSocket par compute | > 100 000 |
| Latence event → réception (p50) | < 100 ms |
| Latence event → réception (p99) | < 500 ms |
| Channels max par projet | 10 000 |
| Abonnés max par channel | 10 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.