web-dev-qa-db-fra.com

Websockets HTML5: nombre maximum de connexions ouvertes?

Les Websockets HTML5 sont (et depuis un certain temps ) un sujet brûlant car elles permettent élégamment en temps réelPush côté serveur .

J'ai actuellement une application qui fonctionne avec des websockets alimentés par Tomcat 7.0.30 qui comprend support websocket . Mais le déplacer vers un environnement de production soulève des questions.

Je voudrais principalement connaître le nombre maximal possible de connexions pouvant fonctionner (être ouvert) simultanément par session de navigation; a session de navigation implique un seul onglet ou une seule fenêtre de navigateur.

Les connexions WebSocket ouvertes représentent-elles le nombre maximal de connexions pouvant être traitées simultanément par le serveur Web? Par exemple. MaxClients dans Apache.

Inversement, le nombre maximum de websockets pour une seule session de navigation est-il limité par le navigateur lui-même? Comme le montre cette article de blog , jusqu'en avril 2012, différents navigateurs prennent en charge différentes quantités de ouvert connexions websocket. (Personnellement, je viserais 1 websocket ouvert par session de navigation; mais cette information serait toujours bonne à savoir).

TL/DR:

  1. Qu'est-ce qui limite le nombre de websockets possibles par session de navigation? Est-ce le client? Le serveur? Ou une combinaison des deux?
  2. Les mêmes limitations s'appliquent-elles aux deux ws: et wss: Connexions?
48

Il n'y a pas de spécification standard de valeur par défaut max-connections pour les navigateurs. Cela dépend de l'implémentation [0]. De plus, l'utilisation de plus d'une socket Web par session de navigation pour la même application semble exagérée car vous pouvez utiliser les canaux pub/sub.

Le goulot d'étranglement pour les connexions se trouve généralement côté serveur. Web-socket est une mise à niveau vers HTTP, donc les connexions ne sont que des connexions HTTP (TCP) mises à niveau [1] .HTTPS et WSS ajoutent juste une couche de sécurité à la connexion normale. Ce ne sont pas des connexions différentes [2]. Dans votre cas, vérifiez maxConnections (et maxThreads ) [3] et votre Maximum du système d'exploitation [4] [5]. Si vos connexions simultanées atteignent des dizaines de milliers, vous devriez peut-être commencer à penser à l'équilibrage de charge ou au clustering [6].

[0] https://code.google.com/p/chromium/issues/detail?id=8532

[1] http://en.wikipedia.org/wiki/WebSocket

[2] http://en.wikipedia.org/wiki/HTTP_Secure

[3] http://Tomcat.Apache.org/Tomcat-7.0-doc/config/http.html

[4] https://serverfault.com/questions/10852/what-limits-the-maximum-number-of-connections-on-a-linux-server

[5] https://superuser.com/questions/251596/is-there-a-hard-limit-of-65536-open-tcp-connections-per-ip-address-on-linux =

[6] http://Tomcat.Apache.org/Tomcat-7.0-doc/config/cluster.html

En savoir plus sur la simultanéité élevée: http://www.kegel.com/c10k.html

34
Mardie

Dans Gecko 7, ils ont introduit le paramètre network.websocket.max-connections vous pouvez le définir dans about:config. Il définit le nombre maximal de connexions Websocket "à la fois" selon ceci: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API

Je ne sais pas si vous pouvez déterminer ce nombre à partir du code et s'il existe un moyen de déterminer combien sont ouverts dans d'autres sessions (donc combien il vous en reste).

7
Mat