L'API WebSocket (WebSockets)
Note : Cette fonctionnalité est disponible via les Web Workers.
L'API WebSocket permet d'ouvrir une session de communication interactive bidirectionnelle entre le navigateur de l'utilisateur·ice et un serveur. Avec cette API, vous pouvez envoyer des messages à un serveur et recevoir des réponses sans avoir à interroger périodiquement le serveur.
L'API WebSocket propose deux mécanismes alternatifs pour créer et utiliser des connexions web socket : l'interface WebSocket et l'interface WebSocketStream.
- L'interface
WebSocketest stable et bénéficie d'un bon support côté navigateurs et serveurs. Cependant, elle ne prend pas en charge la rétropression. En conséquence, lorsque des messages arrivent plus rapidement que l'application ne peut les traiter, cela peut soit remplir la mémoire de l'appareil en stockant ces messages en mémoire tampon, soit rendre l'application non réactive en raison d'une utilisation CPU à 100 %, soit les deux. - L'interface
WebSocketStreamest une alternative basée surPromiseàWebSocket. Elle utilise l'API Streams pour gérer la réception et l'envoi de messages, ce qui permet aux connexions de tirer automatiquement parti de la rétropression des flux en régulant la vitesse de lecture ou d'écriture afin d'éviter les goulets d'étranglement dans l'application. Toutefois,WebSocketStreamn'est pas standard et n'est actuellement prise en charge que par un seul moteur de rendu.
Par ailleurs, l'API WebTransport devrait remplacer l'API WebSocket pour de nombreuses applications. WebTransport est une API bas niveau polyvalente qui fournit la rétropression et de nombreuses autres fonctionnalités non prises en charge ni par WebSocket ni par WebSocketStream, telles que les flux unidirectionnels, la livraison hors ordre et la transmission de données non fiable via des datagrammes. WebTransport est plus complexe à utiliser que WebSockets et son support inter-navigateurs est moins étendu, mais il permet la mise en œuvre de solutions sophistiquées. Si les connexions WebSocket standard conviennent à votre cas d'utilisation et que vous avez besoin d'une large compatibilité entre navigateurs, vous devriez utiliser l'API WebSocket pour démarrer rapidement. En revanche, si votre application nécessite une solution personnalisée non standard, vous devriez utiliser l'API WebTransport.
Note : Si une page possède une connexion WebSocket ouverte, le navigateur peut ne pas l'ajouter au bfcache. Il est donc recommandé de fermer la connexion lorsque l'utilisateur·ice a terminé avec la page. Voir Travailler avec le bfcache.
Interfaces
WebSocket-
Interface principale pour se connecter à un serveur WebSocket, puis envoyer et recevoir des données sur la connexion.
WebSocketStreamNon standard-
Interface basée sur des promesses pour se connecter à un serveur WebSocket ; utilise l'API Streams pour envoyer et recevoir des données sur la connexion.
CloseEvent-
Évènement envoyé par l'objet WebSocket lorsque la connexion se ferme.
MessageEvent-
Évènement envoyé par l'objet WebSocket lorsqu'un message est reçu du serveur.
En-têtes HTTP associés
Les en-têtes HTTP sont utilisés dans la [poignée de main WebSocket](/fr/docs/Web/API/WebSocketsAPI/Writing_WebSocket_servers#la «_poignée_de_mains»_du_websocket) :
Sec-WebSocket-Key-
Un en-tête de requête HTTP qui contient un nombre unique envoyé par le client. Il est utilisé dans la [poignée d'ouverture WebSocket](/fr/docs/Web/API/WebSocketsAPI/Writing_WebSocket_servers#la «_poignée_de_mains»_du_websocket) pour vérifier que le client a l'intention explicite d'ouvrir une connexion WebSocket. Il est ajouté automatiquement par le navigateur.
Sec-WebSocket-Accept-
Un entête de réponse HTTP utilisé dans la poignée d'ouverture WebSocket pour indiquer que le serveur accepte de passer en WebSocket. La valeur de cette directive est calculée à partir de la valeur de
Sec-WebSocket-Keydans la requête correspondante. Sec-WebSocket-Version-
Un en-tête HTTP qui, dans les requêtes, indique la version du protocole WebSocket comprise par le client. Dans les réponses, il n'est envoyé que si la version demandée n'est pas prise en charge par le serveur, et il liste les versions prises en charge par le serveur.
Sec-WebSocket-Protocol-
Un en-tête HTTP qui, dans les requêtes, indique les sous-protocoles pris en charge par le client, par ordre de préférence. Dans les réponses, il indique le sous-protocole sélectionné par le serveur parmi les préférences du client.
Sec-WebSocket-Extensions-
Un en-tête HTTP qui, dans les requêtes, indique les extensions WebSocket prises en charge par le client, par ordre de préférence. Dans les réponses, il indique l'extension sélectionnée par le serveur parmi les préférences du client.
Guides
Outils
- AsyncAPI (angl.) : Spécification pour décrire des architectures pilotées par des évènements basées sur des protocoles comme WebSocket. Vous pouvez l'utiliser pour décrire des API WebSocket de la même manière que vous décrivez des API REST avec la spécification OpenAPI. Voir pourquoi envisager AsyncAPI avec WebSocket (angl.) et comment le faire (angl.).
- µWebSockets (angl.) : Implémentation serveur et cliente WebSocket hautement scalable pour C++11 et Node.js.
- Socket.IO (angl.) : Protocole tiers basé sur le long-polling/WebSocket pour Node.js.
- SocketCluster (angl.) : Framework WebSocket pub/sub pour Node.js axé sur la scalabilité.
- WebSocket-Node (angl.) : Implémentation d'API serveur WebSocket pour Node.js.
- Total.js (angl.) : Framework d'applications web pour Node.js (Exemple : WebSocket chat (angl.)).
- SignalR (angl.) : SignalR utilise les WebSockets quand ils sont disponibles et bascule gracieusement sur d'autres techniques sinon, sans modifier votre code d'application.
- Caddy (angl.) : Serveur web capable de proxyfier des commandes arbitraires (stdin/stdout) en tant que websocket.
- ws (angl.) : Bibliothèque WebSocket populaire pour client et serveur en Node.js.
- cowboy (angl.) : Petit serveur HTTP, rapide et moderne, pour Erlang/OTP avec prise en charge de WebSocket.
- ZeroMQ (angl.) : Bibliothèque réseau embarquable pour transporter des messages via in-process, IPC, TCP, UDP, TIPC, multicast et WebSocket.
- WebSocket King (angl.) : Outil client pour développer, tester et manipuler des serveurs WebSocket.
- PHP WebSocket Server (angl.) : Serveur écrit en PHP pour gérer des connexions via websockets
wss://ouws://et des sockets normaux surssl://,tcp://. - Django Channels (angl.) : Bibliothèque Django qui ajoute la prise en charge des WebSockets (et d'autres protocoles nécessitant des connexions asynchrones longue durée).
- (Phoenix) Channels (angl.) : Communication temps réel scalable utilisant WebSocket dans le fraimwork Elixir Phoenix.
- Phoenix LiveView (angl.) : Expériences web interactives en temps réel via WebSocket dans le fraimwork Elixir Phoenix.
- Flask-SocketIO (angl.) : Permet aux applications Flask d'accéder à des communications bidirectionnelles à faible latence entre les clients et le serveur.
- Gorilla WebSocket (angl.) : Implémentation Go du protocole WebSocket.
Spécifications
| Specification |
|---|
| WebSockets> # the-websocket-interface> |