Chrome se bloque après le transfert d'une certaine quantité de données - en attente de socket disponible

101

J'ai un jeu par navigateur et j'ai récemment commencé à ajouter de l'audio au jeu.

Chrome ne charge pas la page entière et reste bloqué "91 requests | 8.1 MB transferred"et ne charge plus de contenu; et il brise même le site Web dans tous les autres onglets, en disant Waiting for available socket.

Après 5 minutes (exactement), les données sont chargées.

entrez la description de l'image ici

entrez la description de l'image ici

Cela ne se produit sur aucun autre navigateur.

La suppression d'un fichier MP3 (le dernier ajouté) a résolu le problème, est-ce donc peut-être un problème de limite de données?

Foxhoundn
la source
1
Avez-vous déposé ou trouvé un rapport de bogue pour cela? Nous constatons exactement le même comportement (besoin de vérifier si le nombre de requêtes ou d'octets transférés correspond, mais sinon, le comportement et l'erreur correspondent exactement)
Jan
1
Cela ressemble à un problème connu - voir code.google.com/p/chromium/issues/detail?id=324653 Jetez un œil à code.google.com/p/chromium/issues/detail?id=324653 ce qui se passe exactement. Mais si vous atteignez une limite de sockets ouverts, alors même les autres navigateurs ont une limite de nombre de connexions à un seul domaine. Vous avez deux options - soit assurez-vous que vous n'avez que quelques requêtes simultanées actives (sérialisez-les; ne paralélisez pas); ou divisez votre serveur en sous-domaines et émettez des demandes vers différents sous-domaines.
janvier
5
Cas particulier, mais si vous avez récemment redémarré Chrome et que plusieurs onglets sont ouverts sur un serveur nécessitant une authentification HTTP de base, vous pouvez obtenir ces erreurs car l'un de vos onglets d'arrière-plan a fait apparaître une boîte de dialogue d'authentification. Vérifiez tous les autres onglets ouverts pour le site en question, connectez-vous si nécessaire et voyez si le problème est résolu.
Nathaniel Heinrichs
Quelqu'un sait-il de quelle extension il s'agit pour suivre ces données qu'il a fournies dans la capture d'écran?
AlexioVay
2
@NathanielHeinrichs +1 pour le "cas de niche" qui me dérange depuis 2 semaines. C'est exactement ce qui m'est arrivé, et maintenant je sais pourquoi! Merci.
Marcus

Réponses:

68

Il semble que vous atteignez la limite de connexions par serveur. Je vois que vous chargez beaucoup de fichiers statiques et mon conseil est de les séparer sur des sous-domaines et de les servir directement avec Nginx par exemple.

  • Créez un sous-domaine appelé img.yoursite.com et chargez toutes vos images à partir de là.

  • Créez un sous-domaine appelé scripts.yourdomain.com et chargez tous vos fichiers JS et CSS à partir de là.

  • Créez un sous-domaine appelé sounds.yoursite.com et chargez tous vos MP3 à partir de là ... etc.

Nginx propose d'excellentes options pour servir directement les fichiers statiques et gérer la mise en cache des fichiers statiques.

Predte4a
la source
11
Cela ne change rien. Mettez simplement de faux domaines dans votre fichier hosts et utilisez-les à la place de localhost.
Predte4a
Pas une option pour moi. J'essaie de diffuser des vidéos de mon serveur domestique sur le Web (lorsque je suis au travail).
Sridhar Sarnobat
4
Dans le cas où httpd (c'est-à-dire apache) peut gérer des centaines de sim. connexions et juste Crome les limite, ce n'est pas une solution. Dans mon cas, c'est 6 sockets par profil, donc je peux en ouvrir 6 de plus en profil anonyme, etc. C'est une solution stackoverflow.com/a/29639535/904846 qui peut être acceptée comme meilleure réponse.
dmnc
146

Explication:

Ce problème se produit car Chrome autorise jusqu'à 6 connexions ouvertes par défaut. Donc, si vous diffusez simultanément plusieurs fichiers multimédias à partir de 6 <video>ou<audio> balises, la 7ème connexion (par exemple, une image) se bloquera jusqu'à ce que l'une des sockets s'ouvre. Habituellement, une connexion ouverte se fermera après 5 minutes d'inactivité, et c'est pourquoi vous voyez enfin vos fichiers .png se charger à ce stade.

Solution 1:

Vous pouvez éviter cela en minimisant le nombre de balises multimédias qui maintiennent une connexion ouverte. Et si vous devez en avoir plus de 6, assurez-vous de les charger en dernier ou qu'ils n'ont pas d'attributs comme preload="auto".

Solution 2:

Si vous essayez d'utiliser plusieurs effets sonores pour un jeu Web, vous pouvez utiliser l' API Web Audio . Ou pour simplifier les choses, utilisez simplement une bibliothèque comme SoundJS , qui est un excellent outil pour lire simultanément une grande quantité d'effets sonores / de morceaux de musique.

Solution 3: Forcer l'ouverture des sockets (non recommandé)

Si vous le devez, vous pouvez forcer l'ouverture des sockets dans votre navigateur (dans Chrome uniquement):

  1. Accédez à la barre d'adresse et tapez chrome://net-internals.
  2. Sélectionnez Socketsdans le menu.
  3. Cliquez sur le Flush socket poolsbouton.

Cette solution n'est pas recommandée car vous ne devez pas vous attendre à ce que vos visiteurs suivent ces instructions pour pouvoir consulter votre site.

Marquizzo
la source
13
Bien que la réponse acceptée fournisse généralement de bonnes informations, c'est la meilleure réponse.
taco du
1
Je viens d'installer Neo4J 3.0.4 et lors de l'ouverture de l' hôte local: 7474, il est indiqué en attente de sockets disponibles, le rinçage essayé ne fonctionne toujours pas et dans la liste du pool indique 6 actifs et 2 en attente pour ce site
Adeem
Le rinçage des pools de sockets ne fonctionne pas non plus pour moi (je joue de petits morceaux de plusieurs <video>éléments HTML5 et
j'atteins
Dans mon cas, il y avait de nombreux onglets ouverts et interrogés sur le serveur, fermé tous les onglets et maintenant c'est bon.
igaurav
Notre ancienne application demandait des images (zoom avant / arrière.png, etc.) à un serveur public (qui a dû cesser d'être pris en charge, ce qui a entraîné de nombreux rapports d'erreur). Toutes les demandes adressées à ce serveur étaient bloquées en tant que "En attente" dans Chrome et il ne renvoyait un code d'état HTTP 502 qu'après environ deux minutes. Cela a laissé l'application suspendue et incapable de demander des images à notre propre serveur car elle était bloquée pour demander ces images. Excellente réponse - m'a aidé à retracer cela!
Francis Dean
13

Le message:

En attente de la prise disponible ...

s'affiche, car vous avez atteint une limite sur ssl_socket_pool par hôte, proxy ou groupe.

Voici le nombre maximum de connexions HTTP que vous pouvez établir avec un navigateur Chrome:

  • Le nombre maximum de connexions par proxy est de 32 connexions. Cela peut être modifié dans la liste des stratégies .
  • Maximum par hôte: 6 connexions.

    Ceci est probablement codé en dur dans le code source du navigateur Web, vous ne pouvez donc pas le modifier.

  • Total de 256 connexions HTTP regroupées par navigateur.

Source: Réseau d'entreprise pour les appareils Chrome

Les limites ci-dessus peuvent être vérifiées ou vidées à chrome://net-internals/#sockets(ou en temps réel à chrome://net-internals/#events&q=type:SOCKET%20is:active).


Votre problème avec l'audio peut être lié au bogue Chrome 162627 où l'audio HTML5 ne se charge pas et atteint le maximum de connexions simultanées par serveur: proxy. C'est toujours un problème actif au moment de la rédaction (2016).

Un problème beaucoup plus ancien lié à la demande de vidéo HTML5 reste en attente , il est probablement lié au problème # 234779 qui a été corrigé en 2014. Et lié à SPDY qui peut être trouvé dans le numéro 324653: problème SPDY: attente des sockets disponibles , mais cela a déjà été résolu en 2014, donc probablement pas lié.

Un autre problème connexe maintenant marqué comme dupliqué peut être trouvé dans le problème 401845: Échec du préchargement des métadonnées audio. N'a chargé que 6 sur 10+, ce qui était lié au problème avec le code du lecteur multimédia laissant un tas de demandes en pause.


Cela peut également être lié à certains logiciels publicitaires ou extensions antivirus Chrome utilisant vos sockets dans les arrière-plans (comme Sophos ou Kaspersky ), alors vérifiez l' activité du réseau dans DevTools .

Kenorb
la source
1
Comment puis-je changer 6 par serveur à 8 par serveur car il semble que certains logiciels que
j'utilise
@Adeem Je ne pense pas que vous puissiez changer cela, je pense que c'est codé en dur dans le code source. Vous pouvez signaler ce problème en décrivant votre scénario spécifique.
kenorb
1
chrome: // net-internals / # events & q = type: SOCKET% 20is: le lien actif n'est pas à jour dans la dernière version de Chrome
pyrytakala
6

la solution simple et correcte est de retarder le préchargement de votre fichier audio et vidéo du paramétrage et de revérifier votre page votre problème d'attente de socket disponible sera résolu ...

si vous utilisez jplayer alors remplacez le préchargement: "metadata" pour précharger: "aucun" de jplayer Fichier JS ...

préchargement: "métadonnées" est la valeur par défaut qui lit votre fichier audio / vidéo lors du chargement de la page, c'est pourquoi Google Chrome affiche l'erreur "En attente de socket disponible"

Najam ali shahid
la source
0

Notre première pensée est que le site est en panne ou similaire, mais la vérité est que ce n'est pas le problème ou le handicap. Ce n'est pas non plus un problème car une simple connexion testée sous Firefox, Opera ou l'explorateur de services s'ouvre normalement.

L'erreur dans Chrome affiche un signe qui dit "Ce site n'est pas disponible" et une clarification avec la légende "Erreur 15 (net :: ERR_SOCKET_NOT_CONNECTED): Erreur inconnue". L'erreur est assez courante dans Google Chrome, plus précisément dans ses mises à jour, et sa solution de contournement est de redémarrer l'ordinateur.

Comme les solutions partielles ne sont pas beaucoup, nous vous proposons un tutoriel pour résoudre le problème en moins d'une minute. Pour éviter ce problème et vous assurer que les services sont normalement ouverts dans Google Chrome, vous devez insérer ce qui suit dans la barre d'adresse: chrome: // net-internals (puis donner "Enter"). Ils doivent ensuite aller dans le menu "Socket" dans le menu de gauche et choisir "Flush Socket Pools" (regardez les captures d'écran suivantes pour guider http://www.fixotip.com/how-to-fix-error-waiting-for -available-sockets-in-google-chrome / ) Cela a résolu le problème et ne rencontrera plus de problèmes d'accès à Gmail, Google ou à l'un des services du géant de Mountain View. J'espère que vous l'avez trouvé utile et que vous partagez le tutoriel avec qui ils ont besoin ou sur les réseaux sociaux: Facebook, Twitter ou Google+.

John
la source
0

Chrome est un navigateur basé sur Chromium et les navigateurs basés sur Chromium n'autorisent qu'un maximum de 6 connexions de socket ouvertes à la fois, lorsque la 7ème connexion démarre, il restera inactif et attendra que l'un des 6 en cours d'exécution s'arrête, puis il le sera. commence à fonctionner. D'où le code d'erreur «en attente des sockets disponibles» , le 7ème attendra qu'une de ces 6 sockets devienne disponible, puis il commencera à fonctionner.

Tu peux soit

Yash
la source