flexway
FRENParler à un expert

Flux : SSE et WebSocket

GuideDéveloppeursDepuis la version 0.2.0

Markdown

Sur cette page

Les flux sont relayés sans retenue : chaque évènement arrive quand l'amont l'émet.

Côté produit : Passerelle d'API ; côté exploitation : Flux SSE et WebSocket.

Server-sent events

curl -N -H "Authorization: Bearer $TOKEN" -H 'Accept: text/event-stream' https://api.example.com/events
Règle Détail
Pas de délai total Un flux ouvert n'est pas coupé par le budget de l'opération
Le silence le termine Au-delà du délai de lecture de l'exploitant sans octet, le flux se ferme : faites émettre un battement (: ping) plus souvent
Débit Compté à l'ouverture

Le EventSource d'un navigateur ne sait pas poser Authorization. Lisez le flux avec fetch :

const res = await fetch("https://api.example.com/events", {
  headers: { Authorization: `Bearer ${token}`, Accept: "text/event-stream" },
});
const reader = res.body.pipeThrough(new TextDecoderStream()).getReader();
for (;;) {
  const { value, done } = await reader.read();
  if (done) break;
  handle(value); // découpez sur la ligne vide qui termine un évènement
}

WebSocket

La mise à niveau est une requête comme une autre : identité et débit sont vérifiés à l'ouverture, puis la connexion survit au budget de l'opération.

// Un navigateur ne pose pas d'en-tête sur un WebSocket : l'exploitant décide comment l'identité
// arrive (cookie déclaré au contrat, edge qui authentifie). Un client serveur pose Authorization :
const ws = new WebSocket("wss://api.example.com/ws", { headers: { Authorization: `Bearer ${token}` } }); // Node (ws)

Les canaux d'évènements d'un courtier (accusés, reprise) sont décrits à part : canaux asynchrones.

Étapes suivantes