Chrome zawiesza się po przesłaniu określonej ilości danych - oczekiwanie na dostępne gniazdo


101

Mam grę przeglądarkową i niedawno zacząłem dodawać do niej dźwięk.

Chrome nie ładuje całej strony, blokuje się "91 requests | 8.1 MB transferred"i nie wczytuje więcej treści; a nawet łamie witrynę we wszystkich innych zakładkach, mówiąc Waiting for available socket.

Po 5 minutach (dokładnie) dane są ładowane.

wprowadź opis obrazu tutaj

wprowadź opis obrazu tutaj

Nie dzieje się tak w żadnej innej przeglądarce.

Usunięcie jednego pliku MP3 (ostatnio dodanego) rozwiązało problem, więc czy może to być problem z limitem danych?


1
Czy zgłosiłeś lub znalazłeś raport o błędzie? Widzimy dokładnie to samo zachowanie (musimy sprawdzić, czy liczba żądań lub przekazanych bajtów jest zgodna, ale poza tym zachowanie i błąd dokładnie pasują)
styczeń

1
To wygląda jak znanego problemu - zobacz code.google.com/p/chromium/issues/detail?id=324653 Zajrzyj do code.google.com/p/chromium/issues/detail?id=324653 co się dokładnie dzieje. Ale jeśli osiągasz limit otwartych gniazd, w rzeczywistości nawet inne przeglądarki mają ograniczenie liczby połączeń z pojedynczą domeną. Masz dwie możliwości - albo upewnij się, że masz aktywnych tylko kilka jednoczesnych żądań (serializuj je; nie paralelizuj); lub podziel serwer na subdomeny i wysyłaj żądania do różnych subdomen.
stycznia

5
Niszowy przypadek, ale jeśli niedawno ponownie uruchomiłeś Chrome i masz otwartych wiele kart na serwerze, który wymaga podstawowego uwierzytelniania HTTP, możesz otrzymać te błędy, ponieważ jedna z kart w tle wyświetliła okno dialogowe uwierzytelniania. Sprawdź wszystkie inne otwarte karty danej witryny, zaloguj się w razie potrzeby i zobacz, czy problem został rozwiązany.
Nathaniel Heinrichs

Czy ktoś wie, jakie to rozszerzenie do śledzenia danych, które podał na zrzucie ekranu?
AlexioVay

2
@NathanielHeinrichs +1 za „niszową sprawę”, która dręczy mnie przez ostatnie 2 tygodnie. Właśnie to się ze mną dzieje i teraz wiem dlaczego! Dzięki.
Marcus

Odpowiedzi:


68

Wygląda na to, że osiągnąłeś limit połączeń na serwer. Widzę, że ładujesz wiele plików statycznych, a moja rada jest taka, aby oddzielić je na subdomenach i udostępniać je bezpośrednio na przykład w Nginx.

  • Utwórz subdomenę o nazwie img.yoursite.com i załaduj stamtąd wszystkie swoje obrazy.

  • Utwórz subdomenę o nazwie scripts.twojadomena.com i załaduj stamtąd wszystkie swoje pliki JS i CSS.

  • Utwórz subdomenę o nazwie sounds.yoursite.com i załaduj stamtąd wszystkie swoje pliki MP3 ... itd.

Nginx ma świetne opcje bezpośredniego udostępniania plików statycznych i zarządzania buforowaniem plików statycznych.


11
To niczego nie zmienia. Po prostu umieść fałszywe domeny w pliku hosts i używaj ich zamiast localhost.
Predte4a

To nie jest opcja dla mnie. Próbuję udostępniać filmy z mojego serwera domowego przez Internet (kiedy jestem w pracy).
Sridhar Sarnobat

4
W przypadku, gdy httpd (czyli apache) może obsłużyć setki simów. połączeń i tylko Crome je ogranicza, to nie jest rozwiązanie. W moim przypadku jest to 6 gniazd na profil, więc mogę otworzyć 6 kolejnych w profilu anonimowym itp. Jest to rozwiązanie stackoverflow.com/a/29639535/904846, które można zaakceptować jako najlepszą odpowiedź.
dmnc

146

Wyjaśnienie:

Ten problem występuje, ponieważ Chrome domyślnie zezwala na maksymalnie 6 otwartych połączeń. Więc jeśli przesyłasz strumieniowo wiele plików multimedialnych jednocześnie z 6 <video>lub <audio>tagów, siódme połączenie (na przykład obraz) po prostu zawiesza się, dopóki jedno z gniazd się nie otworzy. Zwykle otwarte połączenie zamyka się po 5 minutach bezczynności i dlatego widzisz, że Twoje pliki .png w końcu ładują się w tym momencie.

Rozwiązanie 1:

Możesz tego uniknąć, minimalizując liczbę tagów multimedialnych, które utrzymują otwarte połączenie. A jeśli potrzebujesz więcej niż 6, upewnij się, że ładujesz je jako ostatnie lub że nie mają atrybutów takich jak preload="auto".

Rozwiązanie 2:

Jeśli próbujesz użyć wielu efektów dźwiękowych w grze internetowej, możesz użyć interfejsu API Web Audio . Lub, aby uprościć, po prostu użyj biblioteki takiej jak SoundJS , która jest doskonałym narzędziem do jednoczesnego odtwarzania dużej liczby efektów dźwiękowych / ścieżek muzycznych.

Rozwiązanie 3: Gniazda z wymuszonym otwarciem (niezalecane)

Jeśli musisz, możesz wymusić otwarcie gniazd w przeglądarce (tylko w Chrome):

  1. Przejdź do paska adresu i wpisz chrome://net-internals.
  2. Wybierz Socketsz menu.
  3. Kliknij Flush socket poolsprzycisk.

To rozwiązanie nie jest zalecane, ponieważ nie należy oczekiwać, że użytkownicy będą postępować zgodnie z tymi instrukcjami, aby móc przeglądać witrynę.


13
Chociaż zaakceptowana odpowiedź zawierała ogólnie dobre informacje, jest to najlepsza odpowiedź.
taco

1
Właśnie zainstalowałem Neo4J 3.0.4 i po otwarciu localhost: 7474 mówi, że czeka na dostępne gniazda, wypróbowano flush nadal nie działa, a na liście puli jest 6 aktywnych i 2 oczekujących na tę witrynę
Adeem

Płukanie pul gniazd też nie działa dla mnie (gram małe fragmenty kilku <video>elementów HTML5 i
osiągam

W moim przypadku było wiele otwartych i odpytywanych kart do serwera, zamknięte wszystkie karty i teraz jest dobrze.
igaurav

Nasza starsza aplikacja żądała obrazów (powiększanie / pomniejszanie.png itp.) Z publicznego serwera (który musiał przestać być obsługiwany - co prowadziło do wielu raportów o błędach). Wszystkie żądania wysyłane do tego serwera utknęły w Chrome jako „Oczekujące” i po około dwóch minutach odesłał kod stanu HTTP 502. To spowodowało, że aplikacja zawiesiła się i nie mogła zażądać obrazów z naszego własnego serwera, ponieważ została zablokowana podczas żądania tych obrazów. Świetna odpowiedź - pomogła mi to namierzyć!
Francis Dean

13

Wiadomość:

Czekam na dostępne gniazdo ...

jest wyświetlany, ponieważ osiągnąłeś limit ssl_socket_pool dla hosta, serwera proxy lub grupy.

Oto maksymalna liczba połączeń HTTP, które można nawiązać za pomocą przeglądarki Chrome:

  • Maksymalna liczba połączeń na serwer proxy to 32 połączenia. Można to zmienić na liście zasad .
  • Maksymalnie na hosta: 6 połączeń.

    Jest to prawdopodobnie zakodowane na stałe w kodzie źródłowym przeglądarki internetowej, więc nie można tego zmienić.

  • Łącznie 256 połączeń HTTP w puli na przeglądarkę.

Źródło: sieci korporacyjne dla urządzeń z Chrome

Powyższe limity można sprawdzić lub spłukać w chrome://net-internals/#sockets(lub w czasie rzeczywistym o chrome://net-internals/#events&q=type:SOCKET%20is:active).


Twój problem z dźwiękiem może być związany z błędem Chrome 162627, w którym dźwięk HTML5 nie ładuje się i osiąga maksymalną liczbę jednoczesnych połączeń na serwer: proxy. Jest to nadal aktywny problem w momencie pisania (2016).

Znacznie starszy problem związany z żądaniem wideo HTML5 pozostaje w toku , prawdopodobnie jest związany z problemem # 234779, który został naprawiony w 2014 r. I związany z SPDY, który można znaleźć w numerze 324653: Problem z SPDY: oczekiwanie na dostępne gniazda , ale to zostało już naprawione w 2014 roku, więc prawdopodobnie nie jest to związane.

Inny powiązany problem oznaczony teraz jako zduplikowany można znaleźć w problemie 401845: Błąd wstępnego ładowania metadanych audio. Załadowano tylko 6 z 10+, co było związane z problemem z kodem odtwarzacza multimediów, pozostawiając kilka wstrzymanych żądań.


Może to być również związane z niektórymi rozszerzeniami adware lub antywirusowymi Chrome używającymi twoich gniazd w tle (takich jak Sophos lub Kaspersky ), więc sprawdź aktywność sieciową w DevTools .


1
Jak mogę zmienić 6 na serwer na 8 na serwer, jak się wydaje, niektóre programy, których używam, wymagają 8, w wyniku czego 2 pozostają w toku, a strona nigdy nie jest ładowana
Adeem

@Adeem Myślę, że nie możesz tego zmienić, uważam, że jest to zapisane na stałe w kodzie źródłowym. Możesz zgłosić ten problem, opisując swój konkretny scenariusz.
kenorb

1
chrome: // net-internals / # events & q = type: SOCKET% 20is: aktywny link nie jest aktualny w najnowszym Chrome
pyrytakala

6

proste i poprawne rozwiązanie to odłóż preload swój plik audio i wideo z ustawień i ponownie sprawdź swoją stronę twój problem z oczekiwaniem na

wolne gniazdo zostanie rozwiązany ... jeśli używasz jplayera to zamień preload: "metadata" na preload: "none" z jplayera Plik JS ...

preload: „metadane” to domyślna wartość, która odtwarza plik audio / wideo podczas wczytywania strony, dlatego Google Chrome wyświetla błąd „oczekuje na dostępne gniazdo”


0

Nasza pierwsza myśl jest taka, że ​​strona nie działa lub coś podobnego, ale prawda jest taka, że ​​to nie jest problem ani niepełnosprawność. Nie stanowi to również problemu, ponieważ proste połączenie podczas testowania w przeglądarce Firefox, Opera lub Eksplorator usług otwiera się normalnie.

Błąd w przeglądarce Chrome wyświetla znak „Ta witryna jest niedostępna” oraz wyjaśnienie z legendą „Błąd 15 (net :: ERR_SOCKET_NOT_CONNECTED): nieznany błąd”. Błąd jest dość typowy w Google Chrome, a dokładniej w jego aktualizacjach, a jego obejściem jest ponowne uruchomienie komputera.

Ponieważ częściowe rozwiązania to niewiele, oferujemy samouczek, dzięki któremu rozwiążesz usterkę w mniej niż minutę. Aby uniknąć tego problemu i upewnić się, że usługi w Google Chrome są normalnie otwarte, w pasku adresu należy wstawić następujący tekst: chrome: // net-internals (a następnie nacisnąć „Enter”). Następnie muszą przejść do „Socket” w menu po lewej stronie i wybrać „Flush Socket Pools” (spójrz na poniższe zrzuty ekranu, aby poprowadzić http://www.fixotip.com/how-to-fix-error-waiting-for -available-sockets-in-google-chrome / ) Ten problem został rozwiązany i nie będzie już żadnych problemów z dostępem do Gmaila, Google czy jakichkolwiek usług giganta z Mountain View. Mam nadzieję, że uznasz to za przydatne i udostępnisz samouczek komu potrzebują lub sieci społecznościowe: Facebook, Twitter lub Google+.


0

Chrome jest przeglądarką opartą na Chromium, a przeglądarki oparte na Chromium pozwalają tylko na maksymalnie 6 otwartych połączeń na raz, po uruchomieniu siódmego połączenia będzie po prostu pozostawać bezczynne i czekać, aż jedno z 6 uruchomionych zostanie zatrzymane, a następnie będzie Zacznij biec. Stąd kod błędu „oczekuje na dostępne gniazda” , siódmy będzie czekał, aż jedno z tych 6 gniazd stanie się dostępne, a następnie zacznie działać.

Możesz albo

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.