web-dev-qa-db-fra.com

inconvénients des websockets

Je voudrais savoir quel genre de limitations il y a dans l'utilisation des websockets.

Websockets est tellement puissant. Je ne peux pas imaginer que c'est sans inconvénients.

Disons, quel est le nombre d'utilisateurs qui peuvent se connecter simultanément à un serveur (si je crée un jeu et que les utilisateurs se connecteront au jeu via WebSockets, qu'est-ce qui limitera le nombre d'utilisateurs pouvant se connecter à un moment donné?)

Est-il également vrai qu'à chaque connexion supplémentaire, la qualité des connexions (la vitesse et des trucs comme ça) va diminuer?

41
Pacerier

Les avantages et les inconvénients dépendront bien sûr du cas d'utilisation spécifique, mais je vais essayer de signaler quelques différences entre WebSocket et HTTP.

WebSocket est plus complexe que HTTP. Vous pouvez établir une connexion HTTP avec un client Telnet, mais vous ne pouvez probablement pas faire de même avec WS. Même si vous ignoriez les exigences de la négociation (qui incluent l'utilisation de la fonction de hachage SHA1), vous ne seriez pas en mesure de masquer et d'encadrer correctement les données à envoyer, et le serveur fermerait la connexion.

Comme l'a dit Uwe, les connexions WebSocket sont censées être plus persistantes que les connexions HTTP. Si vous ne souhaitez recevoir une mise à jour que toutes les 30 minutes, vous devrez utiliser HTTP. Si vous souhaitez recevoir des mises à jour toutes les secondes, un WebSocket peut être une meilleure option, car l'établissement d'une connexion HTTP prend beaucoup de temps.

Pour établir une connexion HTTP, vous devez d'abord établir une connexion TCP (SYN, SYN/ACK, ACK), puis envoyer une demande GET avec un assez gros en-tête, puis enfin recevoir la réponse du serveur (avec un autre gros en-tête).

Avec un WebSocket ouvert, vous recevez simplement la réponse (aucune demande requise), et il est livré avec un en-tête beaucoup plus petit: de deux octets pour les petites trames, jusqu'à 10 octets pour les trames ridiculement grandes (dans la plage des gigaoctets).

Vous devez peser les deux coûts (garder une connexion ouverte vs établir une nouvelle connexion) pour choisir entre les deux protocoles.

Remarque: cette réponse est basée sur la version actuelle du protocole (draft-ietf-hybi-thewebsocketprotocol-09). WebSocket évolue rapidement, de nombreuses implémentations sont toujours basées sur des versions plus anciennes, et certains détails peuvent changer avant d'être finalisés.

41
suriv

D'après ce que j'ai lu, cela semble être lié à HTTP Server Push que j'ai lu qu'il n'est généralement pas recommandé d'utiliser car il crée beaucoup de connexions sur le serveur.

Si je dois choisir, je développerais probablement toujours un mécanisme d'interrogation client.

1
Uwe Keim