Chrome si blocca dopo il trasferimento di una certa quantità di dati, in attesa del socket disponibile


101

Ho un browser game e di recente ho iniziato ad aggiungere l'audio al gioco.

Chrome non carica l'intera pagina, si blocca "91 requests | 8.1 MB transferred"e non carica altri contenuti; e persino interrompe il sito Web in tutte le altre schede, dicendoWaiting for available socket .

Dopo 5 minuti (esattamente) i dati vengono caricati.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Questo non accade su nessun altro browser.

La rimozione di un file MP3 (l'ultimo aggiunto) ha risolto il problema, quindi è forse un problema di limite di dati?


1
Hai archiviato o trovato un bugreport per questo? Stiamo assistendo esattamente lo stesso comportamento (necessità di verificare se il numero di richieste o trasferiti byte abbinati ma per il resto il comportamento e le partite di errore esattamente)
Jan

1
Sembra un problema noto: vedi code.google.com/p/chromium/issues/detail?id=324653 Dai un'occhiata a code.google.com/p/chromium/issues/detail?id=324653 cosa sta succedendo esattamente. Ma se stai raggiungendo un limite di socket aperti, in realtà anche altri browser hanno un limite al numero di connessioni a un singolo dominio. Hai due opzioni: assicurati di avere solo poche richieste simultanee attive (serializzale; non paralelizzare); o dividi il tuo server in sottodomini e invia richieste a diversi sottodomini.
Jan

5
Caso di nicchia, ma se di recente hai riavviato Chrome e hai più schede aperte su un server che richiede l'autenticazione HTTP di base, potresti ricevere questi errori perché una delle tue schede in background ha aperto una finestra di dialogo di autenticazione. Controllare tutte le altre schede aperte per il sito in questione, accedere se necessario e vedere se il problema è stato risolto.
Nathaniel Heinrichs

Qualcuno sa quale estensione è per tenere traccia dei dati che ha fornito nello screenshot?
AlexioVay

2
@NathanielHeinrichs +1 per il "caso di nicchia" che mi ha infastidito nelle ultime 2 settimane. È esattamente quello che mi sta succedendo, e ora so perché! Grazie.
Marcus

Risposte:


68

Sembra che tu stia raggiungendo il limite di connessioni per server. Vedo che stai caricando molti file statici e il mio consiglio è di separarli su sottodomini e servirli direttamente con Nginx, ad esempio.

  • Crea un sottodominio chiamato img.yoursite.com e carica tutte le tue immagini da lì.

  • Crea un sottodominio chiamato scripts.yourdomain.com e carica tutti i tuoi file JS e CSS da lì.

  • Crea un sottodominio chiamato sounds.yoursite.com e carica tutti i tuoi MP3 da lì ... ecc ..

Nginx ha ottime opzioni per servire direttamente file statici e gestire la memorizzazione nella cache dei file statici.


11
Questo non cambia nulla. Metti solo dei domini falsi nel tuo file hosts e usali al posto di localhost.
Predte4a

Non è un'opzione per me. Sto cercando di offrire video dal mio server di casa sul Web (quando sono al lavoro).
Sridhar Sarnobat

4
Nel caso in cui httpd (cioè apache) possa gestire centinaia di sim. connessioni e solo Crome le limita, questa non è una soluzione. Nel mio caso sono 6 socket per profilo, quindi posso aprirne altri 6 in profilo anonimo, ecc. Questa è una soluzione stackoverflow.com/a/29639535/904846 che potrebbe essere accettata come migliore risposta.
dmnc

145

Spiegazione:

Questo problema si verifica perché Chrome consente fino a 6 connessioni aperte per impostazione predefinita. Quindi, se stai trasmettendo più file multimediali contemporaneamente da 6 <video>o<audio> tag, la settima connessione (ad esempio un'immagine) si bloccherà fino a quando uno dei socket non si aprirà. Di solito, una connessione aperta si chiude dopo 5 minuti di inattività, ed è per questo che a quel punto vedrai finalmente il caricamento dei tuoi .png.

Soluzione 1:

Puoi evitarlo riducendo al minimo il numero di tag multimediali che mantengono una connessione aperta. E se devi averne più di 6, assicurati di caricarli per ultimi o che non abbiano attributi comepreload="auto" .

Soluzione 2:

Se stai tentando di utilizzare più effetti sonori per un gioco web, puoi utilizzare l' API Web Audio . O per semplificare le cose, usa semplicemente una libreria come SoundJS , che è un ottimo strumento per riprodurre contemporaneamente una grande quantità di effetti sonori / tracce musicali.

Soluzione 3: apertura forzata dei socket (non consigliato)

Se è necessario, puoi forzare l'apertura dei socket nel tuo browser (solo in Chrome):

  1. Vai alla barra degli indirizzi e digita chrome://net-internals .
  2. Selezionare Sockets dal menu.
  3. Clicca sul Flush socket pools pulsante.

Questa soluzione non è consigliata perché non dovresti aspettarti che i tuoi visitatori seguano queste istruzioni per poter visualizzare il tuo sito.


13
Sebbene la risposta accettata fornisse generalmente buone informazioni, questa è la risposta migliore.
taco

1
Ho appena installato Neo4J 3.0.4 e all'apertura di localhost: 7474 dice in attesa di socket disponibili, provato a scaricare ancora non funzionante e nell'elenco pool dice 6 attivi e 2 in sospeso per questo sito
Adeem

Anche il lavaggio dei pool di socket non funziona per me (sto giocando piccoli pezzi di diversi <video>elementi HTML5 e raggiungo il limite.
Sridhar Sarnobat

Nel mio caso c'erano molte schede aperte e in polling al server, chiuse tutte le schede e ora va bene.
igaurav

La nostra applicazione precedente richiedeva immagini (zoom in / out.png ecc.) Da un server pubblico (che deve aver smesso di essere supportato, portando a molti rapporti di errore). Tutte le richieste a quel server erano bloccate come "In sospeso" in Chrome e avrebbe restituito solo un codice di stato HTTP 502 dopo circa due minuti. Ciò ha lasciato l'applicazione in sospeso e incapace di richiedere immagini dal nostro server poiché era intasato nella richiesta di queste immagini. Ottima risposta - mi ha aiutato a rintracciarlo!
Francis Dean

13

Il messaggio:

In attesa di presa disponibile ...

viene visualizzato, perché hai raggiunto un limite per ssl_socket_pool per Host, Proxy o Gruppo.

Ecco il numero massimo di connessioni HTTP che puoi effettuare con un browser Chrome:

  • Il numero massimo di connessioni per proxy è 32 connessioni. Questo può essere modificato in Elenco criteri .
  • Massimo per host: 6 connessioni.

    Questo è probabilmente codificato nel codice sorgente del browser web, quindi non è possibile modificarlo.

  • 256 connessioni HTTP totali raggruppate per browser.

Fonte: rete aziendale per dispositivi Chrome

I limiti di cui sopra possono essere verificati o cancellati su chrome://net-internals/#sockets(o in tempo reale su chrome://net-internals/#events&q=type:SOCKET%20is:active).


Il tuo problema con l'audio può essere correlato al bug di Chrome 162627 cui l'audio HTML5 non viene caricato e raggiunge il numero massimo di connessioni simultanee per server: proxy. Questo problema è ancora attivo al momento della scrittura (2016).

Un problema molto più vecchio relativo alla richiesta di video HTML5 rimane in sospeso , quindi è probabilmente correlato al problema # 234779 che è stato risolto nel 2014. E relativo a SPDY che può essere trovato nel numero 324653: problema SPDY: in attesa di socket disponibili , ma questo è già stato risolto nel 2014, quindi probabilmente non è correlato.

Un altro problema correlato ora contrassegnato come duplicato può essere trovato nel problema 401845: errore nel precaricare i metadati audio. Sono stati caricati solo 6 su 10+ che erano correlati al problema con il codice del lettore multimediale che lasciava un mucchio di richieste in pausa in giro.


Ciò potrebbe anche essere correlato ad alcuni adware o estensioni antivirus di Chrome che utilizzano i tuoi socket in background (come Sophos o Kaspersky ), quindi controlla l' attività di rete in DevTools .


1
Come posso cambiare 6 per server in 8 per server in quanto sembra che alcuni software che sto utilizzando necessitino di 8, quindi 2 rimangono in sospeso e il sito non viene mai caricato
Adeem

@Adeem Non penso che tu possa cambiarlo, credo che sia hardcoded nel codice sorgente. Puoi segnalare il problema descrivendo il tuo scenario specifico.
Kenorb

1
chrome: // net-internals / # events & q = type: SOCKET% 20is: il collegamento attivo non è aggiornato nell'ultimo Chrome
pyrytakala

6

soluzione semplice e corretta è rimandare precarica il tuo file audio e video dall'impostazione e ricontrolla la tua pagina il tuo problema di attesa per socket disponibile sarà risolto ...

se usi jplayer allora sostituisci precaricamento: "metadata" a precaricare: "nessuno" da jplayer File JS ...

precaricamento: "metadati" è il valore predefinito che riproduce il tuo file audio / video al caricamento della pagina ecco perché Google Chrome mostra l'errore "in attesa di socket disponibile"


0

Il nostro primo pensiero è che il sito sia inattivo o simile, ma la verità è che non è questo il problema o la disabilità. Né è un problema perché una semplice connessione quando testata sotto Firefox, Opera o Services Explorer si apre normalmente.

L'errore in Chrome mostra un segno che dice "Questo sito non è disponibile" e il chiarimento con la legenda "Errore 15 (net :: ERR_SOCKET_NOT_CONNECTED): Errore sconosciuto". L'errore è abbastanza comune in Google Chrome, più precisamente nei suoi aggiornamenti, e la sua soluzione è riavviare il computer.

Poiché le soluzioni parziali non sono molte, offriamo un tutorial per risolvere il problema in meno di un minuto. Per evitare questo problema e assicurarti che i servizi siano normalmente aperti in Google Chrome dovresti inserire quanto segue nella barra degli indirizzi: chrome: // net-internals (quindi dare "Invio"). Devono quindi andare su "Socket" nel menu a sinistra e scegliere "Flush Socket Pools" (guarda le seguenti schermate per guidare http://www.fixotip.com/how-to-fix-error-waiting-for -available-sockets-in-google-chrome / ) Questo ha risolto il problema e non si verificheranno più problemi di accesso a Gmail, Google o ad uno qualsiasi dei servizi del colosso di Mountain View. Spero tu l'abbia trovato utile e condividi il tutorial con chi ha bisogno o sui social network: Facebook, Twitter o Google+.


0

Chrome è un browser basato su Chromium e i browser basati su Chromium consentono solo un massimo di 6 connessioni socket aperte alla volta, quando la settima connessione si avvia, rimarrà inattiva e attenderà che una delle 6 in esecuzione si fermi e poi lo farà inizia a correre. Da qui il codice di errore 'in attesa di socket disponibili' , il settimo aspetterà che uno di quei 6 socket diventi disponibile e poi inizierà a funzionare.

Puoi anche tu

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.