BLOG | NGINX

Applications Web en temps réel avec WebSocket et NGINX

NGINX-Partie-de-F5-horiz-black-type-RGB
Vignette de Rick Nelson
Rick Nelson
Publié le 21 juillet 2014

Dans l'article de blog NGINX en tant que proxy WebSocket, nous avons discuté de l'utilisation de NGINX pour proxy des serveurs d'applications WebSocket . Dans cet article, nous aborderons certains des problèmes d'architecture et d'infrastructure à prendre en compte lors de la création d'applications en temps réel avec WebSocket, y compris les composants dont vous avez besoin et la manière dont vous pouvez structurer vos systèmes.

WebSocket ajoute de l'interactivité à HTTP

HTTP fonctionne bien pour les applications Web basées sur des requêtes/réponses, où le flux de communication fait toujours en sorte que le client initie la requête à laquelle un serveur principal répond. Les applications Web avec une interaction plus interactive basée sur des messages entre le client et le serveur ont besoin de quelque chose au-delà du simple HTTP. Les tentatives précédentes de simulation de communication en duplex intégral via HTTP étaient compliquées et présentaient de nombreux inconvénients. Le protocole WebSocket, ainsi que l'interface JavaScript WebSocket, offrent un moyen beaucoup plus simple de créer ces types d'applications tout en réduisant la quantité de données transférées et la latence.

La possibilité de créer une connexion socket en duplex intégral entre le client et le serveur permet le développement d'applications Web pilotées par événements en temps réel qui utilisent des communications push, poll ou streaming. Grâce à WebSocket, le client ou le serveur peut initier la communication une fois la connexion établie. Cela permet de nombreux types d'applications Web, notamment les jeux en ligne, le chat, le suivi des stocks et les rapports en temps réel des scores sportifs.

Un autre cas d’utilisation de WebSocket est le développement d’applications basées sur WebRTC . WebRTC est utilisé pour créer des applications qui effectuent des communications de navigateur à navigateur. Un canal de signalisation distinct est nécessaire pour la configuration des communications, et WebSocket est un bon protocole à utiliser pour cela.

Exigences techniques pour une application WebSocket

L'infrastructure minimale requise pour une application Web WebSocket est un navigateur client exécutant une application JavaScript WebSocket et communiquant avec un serveur WebSocket. Les versions récentes de tous les principaux navigateurs prennent désormais en charge WebSocket, mais il est important de s'assurer que les clients disposent d'un navigateur prenant en charge WebSocket. Il existe de nombreuses options pour les serveurs WebSocket et voici quelques exemples pour différents environnements (cette liste est fournie pour votre commodité et ne constitue pas une approbation par NGINX, Inc.) :

  Node.jsRubis
wsrails de socket Web
socket.ioem-websocket
ChaussetteJSmachine à web-ruby
  
PerlMatou
MojolicieuxComment utiliser WebSocket
Net::WebSocket::Serveur
  
PHPWebLogic
RochetUtilisation de WebSockets dans WebLogic Server
PHP-Push-WebSocket
Websockets PHP
  
Python
sockets Web
ws4py

Mise à l'échelle de WebSocket pour des volumes de trafic élevés

Il est possible d’utiliser un seul serveur WebSocket, mais les performances de l’application sont limitées par la capacité du serveur, qui constitue également un point de défaillance unique. De nombreuses applications en temps réel sont développées dans l’espoir de voir une adoption généralisée, mais il peut être difficile de prédire le taux de croissance. Pour soutenir la popularité croissante d’une application en temps réel, l’infrastructure doit être capable de :

  • Échelle permettant de prendre en charge un grand nombre d'utilisateurs simultanés
  • Assure une faible latence lors de la gestion des communications entre le client et le serveur
  • Prise en charge de la haute disponibilité (ce qui implique qu'il n'y a pas de point de défaillance unique)
  • Permet de modifier facilement la configuration et de s'adapter aux conditions changeantes

Cela peut être accompli en plaçant NGINX devant les serveurs WebSocket et les serveurs HTTP (puisque la plupart des applications WebSocket utilisent également HTTP), pour agir comme un proxy inverse et un équilibreur de charge prenant en charge WebSocket. Tous les proxys inverses ne fournissent pas de prise en charge directe de WebSocket. Certains, comme Elastic Load Balancing (ELB) dans l'environnement Amazon Web Services (AWS), doivent s'exécuter en mode TCP, ce qui signifie qu'ils ne peuvent pas gérer les en-têtes HTTP. Le protocole proxy a été développé pour gérer cette limitation et NGINX le prend également en charge, ce qui signifie que WebSocket est entièrement pris en charge dans AWS. L'utilisation de NGINX comme proxy inverse WebSocket apporte des avantages supplémentaires, tels que la flexibilité du routage et la possibilité pour NGINX de mettre fin aux connexions SSL.

Une configuration WebSocket typique utilisant NGINX pourrait ressembler à ceci :

Nous montrons ici une variété de clients de bureau et mobiles se connectant à une paire de serveurs NGINX hautement disponibles qui équilibrent la charge d'un ensemble de serveurs HTTP et WebSocket. Ce type de configuration peut résister à la panne d'un serveur WebSocket ou d'un serveur NGINX et vous pouvez facilement ajouter ou supprimer des serveurs WebSocket. De plus, tous les détails de routage sur la manière de se connecter aux serveurs WebSocket sont cachés aux clients, ce qui crée une infrastructure d'application WebSocket robuste et évolutive. Les performances et la fiabilité des applications Web en temps réel sont essentielles. Contactez-nous dès aujourd'hui pour découvrir comment NGINX Plus peut vous aider à améliorer les performances, la fiabilité et la disponibilité de vos applications.

Pour plus d'informations, veuillez consulter :


« Cet article de blog peut faire référence à des produits qui ne sont plus disponibles et/ou qui ne sont plus pris en charge. Pour obtenir les informations les plus récentes sur les produits et solutions F5 NGINX disponibles, explorez notre famille de produits NGINX . NGINX fait désormais partie de F5. Tous les liens NGINX.com précédents redirigeront vers un contenu NGINX similaire sur F5.com."