Alternatives à WebSocket
Published: 2023-12-14 09:23:54

La croissance rapide de l'internet a entraîné une augmentation de la demande de technologie en temps réel, améliorant la communication entre les clients et les serveurs. Les WebSockets ont gagné en popularité et sont aujourd'hui l'une des méthodes les plus populaires pour permettre la communication en temps réel. Cependant, les WebSockets ne sont pas toujours la meilleure option, car le choix de la technologie dépend du cas d'utilisation spécifique. Il existe de nombreuses autres options qui peuvent être mieux adaptées à des situations particulières.

Qu'est-ce qu'une WebSocket ?
----------------------------

Une [WebSocket](https://www.pubnub.com/guides/what-are-websockets-and-when-should-you-use-them/) est un protocole qui fournit [une communication full-duplex](https://en.wikipedia.org/wiki/Duplex_(telecommunications)) et des canaux de communication bidirectionnels entre les clients et les serveurs sur le web. Il permet la transmission de données en temps réel entre le client et le client-serveur sans qu'il soit nécessaire de se reconnecter au serveur. Contrairement au [protocole HTTP](https://www.pubnub.com/guides/http/) traditionnel, les WebSockets permettent au client et au serveur d'établir une communication et d'envoyer des données à tout moment, ce qui les rend idéales pour la transmission de données en temps réel.

![](https://images.ctfassets.net/3prze68gbwl1/7LukONcMxY3FxnW3B4xkYI/0ffd1c3ffbbbffc614155918de821e9c/WebSocket-Diagram.png)

Pourquoi choisir une alternative WebSocket ?
--------------------------------------------

Presque chaque fois que les développeurs pensent à la communication en temps réel, ils utilisent les WebSockets. Pourquoi en est-il ainsi ? Sont-elles le seul/meilleur choix pour réaliser une transmission en temps réel, quel que soit le cas d'utilisation ?

Pour faire simple, les WebSockets offrent des fonctionnalités avancées mais, selon le cas d'utilisation, peuvent présenter de nombreux inconvénients qui peuvent rapidement augmenter la complexité d'un projet. Pour résoudre ce problème, examinons les raisons pour lesquelles les développeurs choisiraient une alternative aux WebSockets.

Performance : Les WebSockets sont surtout connues pour leurs fonctionnalités avancées, mais elles peuvent parfois constituer une solution excessive et entraîner des performances médiocres. Il est essentiel de prendre en compte le cas d'utilisation lorsque l'on décide d'utiliser les WebSockets. Par exemple, il existe de meilleures solutions que les WebSockets si vous avez besoin d'un grand nombre de connexions. Les connexions WebSocket doivent rester vivantes entre le client et le serveur, ce qui accroît la charge du serveur et de l'infrastructure sous-jacente au fur et à mesure de l'évolution.

Interopérabilité : Les WebSockets sont prises en charge par tous les navigateurs/réseaux modernes. Par hasard, si le logiciel est utilisé dans un navigateur ou un réseau ancien, il est essentiel de vérifier si les WebSockets sont pris en charge par ce système ancien. En outre, les réseaux et les proxies bloquent parfois complètement les connexions WebSocket, de sorte que l'endroit où vous utilisez le logiciel est un autre facteur à prendre en considération.

Sécurité : Les WebSockets ne sont pas aussi sûres que d'autres solutions et présentent des vulnérabilités que des acteurs malveillants peuvent exploiter. Parmi les raisons pour lesquelles les WebSockets sont considérées comme moins sûres que d'autres protocoles, on peut citer le détournement intersite de WebSocket et l'usurpation d'origine.

Alternatives aux WebSockets
---------------------------

#### Interrogation longue

[L'interrogation longue](https://www.pubnub.com/guides/long-polling/) est une approche dans laquelle le client envoie une requête HTTP/HTTPS au serveur, mais au lieu de recevoir une réponse instantanée du serveur, elle implique le maintien de la connexion HTTP. Le maintien de la connexion HTTP permet au serveur de répondre ultérieurement lorsque des données sont disponibles ou que le délai d'attente a été atteint. Après avoir reçu la réponse, le client envoie immédiatement la demande suivante.

L'interrogation longue permet une communication en temps réel sans les canaux de communication bidirectionnels fournis par les WebSockets. La principale différence est qu'au lieu de maintenir une connexion persistante comme avec les WebSockets, le client envoie plusieurs demandes pour rétablir la connexion avec le serveur.

![](https://images.ctfassets.net/3prze68gbwl1/2FEB0j6VRCXSe28P5ruiSZ/a149b8fdbbdb77e5f3bb81aab9902dac/HTTP_Long_Polling.png)

#### MQTT

[MQTT](https://www.pubnub.com/guides/mqtt/) est un protocole réseau léger, de type [publication-abonnement](https://www.pubnub.com/guides/everything-you-need-to-know-about-pub-sub/), de machine à machine, conçu pour les sites distants dotés d'appareils dont la bande passante est limitée. Les capteurs intelligents, les wearables et autres appareils IoT doivent généralement utiliser ce type de protocole en raison de leurs contraintes en termes de ressources. Bien que WebSockets puisse être utilisé pour diverses applications, MQTT est explicitement conçu pour la communication de machine à machine, c'est pourquoi il est considéré comme une alternative dans ces cas d'utilisation. MQTT offre des caractéristiques telles qu'une faible surcharge, une livraison efficace des messages et une prise en charge des opérations hors ligne.

![](https://images.ctfassets.net/3prze68gbwl1/2R4S3y5yDtT3r91DvpbI8t/2df1e001799058ec32cadd3a887a8fbd/MQTT_Glossary_Broker_copy_4.png)

#### WebRTC

[WebRTC](https://www.pubnub.com/guides/webrtc/) est un projet libre et gratuit écrit en [C++](https://www.pubnub.com/docs/sdks/posix-cpp) et [JavaScript](https://www.pubnub.com/docs/sdks/javascript) qui permet aux navigateurs web et aux appareils mobiles de communiquer en temps réel. WebRTC est [construit](https://dolby.io/blog/adding-pubnub-in-app-chat-to-your-webrtc-live-stream-app/) pour diffuser de l'audio et de la vidéo directement d'égal à égal sans avoir besoin de connexions côté serveur ou de plugins supplémentaires. Pour les cas d'utilisation tels que la diffusion en direct, les vidéoconférences ou les appels de groupe, ces fonctionnalités peuvent être conçues rapidement avec HTML5 et [JavaScript](https://www.pubnub.com/guides/javascript/) à l'aide de l'API WebRTC. En résumé, la nature pair-à-pair de WebRTC peut contribuer à réduire la charge du serveur et à fournir une expérience de communication plus efficace et de meilleure qualité que les WebSockets dans ces cas d'utilisation.

### WebTransport vs WebSocket

[WebTransport](https://www.pubnub.com/guides/webtransport/) est un nouveau protocole de communication web qui fournit une connexion à faible latence et à haut débit entre un client et un serveur. Il a été créé pour répondre à certaines des limites des protocoles traditionnels, tels que les WebSockets, et pour fournir une alternative moderne capable de mieux répondre aux exigences des applications web d'aujourd'hui.

Alors que les WebSockets commencent généralement par une demande de mise à niveau HTTP/1.1, WebTransport prend en charge plusieurs protocoles, y compris HTTP/2, [HTTP/3](https://en.wikipedia.org/wiki/HTTP/3)et [QUIC](https://en.wikipedia.org/wiki/QUIC)et est un transport [basé sur UDP](https://www.pubnub.com/guides/udp/). En outre, WebTransport prend en charge l'envoi de données de manière fiable via son API de flux et de manière non fiable via son API de datagrammes. Comment cette nouvelle technologie se compare-t-elle aux WebSockets et quels sont les avantages du passage au protocole WebTransport ?

Fonctionnalité avancée : L'un des problèmes des WebSockets est qu'il peut être difficile d'envoyer différents types de données, comme une image et du texte, sur une seule connexion. Ce problème est dû au fait que les données sont divisées en unités plus petites, appelées paquets, pour être transmises via une connexion [TCP](https://www.pubnub.com/guides/tcp-ip/). Lors de la division des données en paquets, il n'y a aucun moyen de distinguer le texte brut de l'image codée contenue dans les données. Pour résoudre ce problème, les WebSockets doivent souvent établir deux connexions distinctes entre le serveur et le client, l'une pour les images et l'autre pour le texte. Cependant, WebTransport offre une solution en prenant en charge plusieurs flux, ce que l'on appelle le multiplexage. En prenant en charge plusieurs flux, les développeurs peuvent envoyer différents types de données par le biais d'une seule connexion, ce qui réduit les frais généraux liés à l'établissement et au maintien de nombreuses connexions. Cela devient essentiel lorsque le serveur doit prendre en charge de nombreux clients. Les connexions multiples par client, comme dans les WebSockets, peuvent entraîner des complexités lorsque le serveur commence à évoluer.

Amélioration des performances : WebTransport est un protocole de transport basé sur UDP, plus performant que les protocoles basés sur TCP comme WebSockets. Comme il est basé sur UDP, il n'y a pas de correction d'erreur ni de retransmission. La correction d'erreur consiste à détecter et à corriger une erreur qui pourrait se produire dans les données transmises. La retransmission consiste à renvoyer les paquets de données perdus ou corrompus sur le réseau. L'absence de frais généraux liés à la correction et à la retransmission réduit le [temps de latence de](https://www.pubnub.com/guides/whats-so-important-about-low-latency/) WebTransport. WebTransport offre également une configuration WebTransportCongestionControl qui peut optimiser le débit et la latence des demandes. Deuxièmement, l'établissement d'une nouvelle connexion avec WebTransport par le biais d'une poignée de main QUIC est généralement plus rapide que TCP sur TLS.

Fiabilité : L'absence de correction d'erreur et de retransmission pourrait faire penser à un développeur que WebTransport est moins fiable que les WebSockets. Ce n'est pas le cas ; WebTransport, de par sa conception, offre une plus grande fiabilité que les WebSockets, en particulier dans des scénarios de communication à large bande passante et dans des conditions de réseau difficiles. WebTransport [fournit](https://www.w3.org/TR/webtransport/) une API de flux pour un transfert de données fiable unidirectionnel (WebTransportReceiveStreams) ou bidirectionnel (WebTransportBidirectionalStream). Ce point de terminaison de l'API offre des configurations telles que WebTransportReliabilityMode, qui peut permettre à la connexion d'avoir un repli TCP dans des scénarios où un transfert de données fiable est essentiel.

Sécurité : WebTransport offre un protocole plus sûr que WebSockets. Il fournit un cryptage de bout en bout par défaut, ce qui garantit que les données entre le client et le serveur ne peuvent pas être interceptées ou modifiées en cours de route. L'une de ces caractéristiques de sécurité est l'utilisation d'un en-tête "Origin", qui permet au serveur de vérifier que les demandes proviennent d'une source fiable. Cela permet d'éviter les attaques de type "cross-site request forgery" (CSRF).

### Autres solutions

#### Événements envoyés par le serveur

[Server-Sent Events (SSE)](https://www.pubnub.com/guides/server-sent-events/) est une technologie de push serveur qui permet à un serveur de transmettre des données à un client par le biais d'une seule connexion HTTP. SSE est un protocole simple et efficace pour envoyer des mises à jour en temps réel à une page web ou à une application, ce qui le rend bien adapté à des cas d'utilisation spécifiques. Contrairement aux requêtes HTTP traditionnelles, qui ferment la connexion après une seule réponse, SSE ouvre une connexion de longue durée entre le serveur et le client, ce qui permet au serveur d'envoyer plusieurs mises à jour sur la même connexion. Contrairement aux connexions bidirectionnelles des WebSockets, les événements envoyés par le serveur ne sont qu'unidirectionnels. Le client n'a qu'à initier la connexion et à la fermer. Cependant, l'ensemble limité de fonctionnalités des événements envoyés par le serveur les rend plus faciles à mettre en œuvre et à déboguer. Les événements envoyés par le serveur ont été à l'origine de la création de la classe [EventSource](https://developer.mozilla.org/en-US/docs/Web/API/EventSource) qui facilite sa mise en œuvre dans les navigateurs web.

![Server Sent Events exchange](https://images.ctfassets.net/3prze68gbwl1/7hGVCgK5DEFPKeakTFWKxu/7462285d9e144607b97f93a58d82a609/Server-Sent.png)

Comment PubNub peut aider avec les alternatives WebSocket
---------------------------------------------------------

Le protocole WebSocket et ses alternatives, telles que WebTransport, sont tous des solutions valables pour gérer les communications en temps réel. Cependant, quelle que soit la solution choisie, la mise en œuvre de l'infrastructure sous-jacente entraînera des pertes de temps et des complexités lors de la mise à l'échelle. Par exemple, en utilisant des technologies particulières telles que [Socket.io](https://www.pubnub.com/guides/what-is-socket-io/) pour créer un serveur WebSocket, les développeurs devront toujours s'occuper de la création dynamique de serveurs dans le monde entier derrière un équilibreur de charge pour gérer l'utilisation de chaque serveur web.

Les [API de données en temps réel](https://www.pubnub.com/learn/glossary/what-is-real-time-data/) de PubNub permettent aux utilisateurs de développer des applications puissantes, axées sur les événements, afin de faciliter la communication en temps réel sur tous les appareils, quel que soit le cas d'utilisation spécifique. PubNub offre une variété de SDK, tels qu'un [SDK JavaScript](https://www.pubnub.com/docs/sdks/javascript) pour les applications web et un [SDK C-Core](https://www.pubnub.com/docs/sdks/c-core) pour les applications IoT, afin d'assurer une intégration transparente avec l'appareil choisi. Avec PubNub, vous n'avez pas à vous soucier de la sélection d'une alternative appropriée ou des complexités sous-jacentes de la mise en œuvre d'une solution en temps réel.

Maintenant que vous savez quand utiliser les WebSockets ou une autre solution, [inscrivez-vous pour un essai gratuit](https://admin.pubnub.com/#/register) ou [planifiez une démonstration](https://www.pubnub.com/company/contact-sales/) pour explorer ce que vous pouvez construire avec PubNub.

Comment PubNub peut-il vous aider ?
===================================

Cet article a été publié à l'origine sur [PubNub.com](https://pubnub.com/blog/websockets-alternatives/)

Notre plateforme aide les développeurs à construire, fournir et gérer l'interactivité en temps réel pour les applications web, les applications mobiles et les appareils IoT.

La base de notre plateforme est le réseau de messagerie en temps réel le plus grand et le plus évolutif de l'industrie. Avec plus de 15 points de présence dans le monde, 800 millions d'utilisateurs actifs mensuels et une fiabilité de 99,999 %, vous n'aurez jamais à vous soucier des pannes, des limites de concurrence ou des problèmes de latence causés par les pics de trafic.

Découvrez PubNub
----------------

Découvrez le [Live Tour](https://www.pubnub.com/tour/introduction/) pour comprendre les concepts essentiels de chaque application alimentée par PubNub en moins de 5 minutes.

S'installer
-----------

Créez un [compte PubNub](https://admin.pubnub.com/signup/) pour un accès immédiat et gratuit aux clés PubNub.

Commencer
---------

La [documentation PubNub](https://www.pubnub.com/docs) vous permettra de démarrer, quel que soit votre cas d'utilisation ou votre [SDK](https://www.pubnub.com/docs).