Chrome зависає після певної кількості переданих даних - чекаючи наявного сокета


101

У мене є браузерна гра, і я нещодавно почав додавати аудіо в гру.

Chrome не завантажує всю сторінку і застрягає "91 requests | 8.1 MB transferred"і не завантажує більше вмісту; і навіть порушує веб-сайт на всіх інших вкладках, кажучи Waiting for available socket.

Через 5 хвилин (саме) дані завантажуються.

введіть тут опис зображення

введіть тут опис зображення

Це не відбувається в жодному іншому браузері.

Видалення одного MP3-файлу (останнього доданого) вирішило проблему, тож можливо це проблема обмеження даних?


1
Ви подали або знайшли помилку для цього? Ми спостерігаємо саме таку поведінку (потрібно перевірити, чи збігається кількість запитів чи переданих байтів, але в іншому випадку поведінка та помилка точно збігаються)
січня

1
Це схоже на відому проблему - див. Code.google.com/p/chromium/isissue/detail?id=324653 Погляньте на code.google.com/p/chromium/isissue/detail?id=324653, що саме відбувається. Але якщо ви потрапляєте на ліміт відкритих сокетів, то насправді навіть інші браузери обмежують кількість підключень до одного домену. У вас є два варіанти - або переконайтеся, що у вас є лише кілька одночасних запитів (серіалізуйте їх; не паралелізуйте); або розділити ваш сервер на субдомени та надсилати запити на різні піддомени.
січня

5
Ніше випадок, але якщо ви нещодавно перезапустили Chrome і відкрили кілька вкладок на сервері, який вимагає базової автентифікації HTTP, ви можете отримати ці помилки, оскільки на одній з ваших фонових вкладок з’явилося діалогове вікно аутентифікації. Перевірте всі інші відкриті вкладки для відповідного веб-сайту, увійдіть у міру необхідності та перевірте, чи вирішена проблема.
Натаніель Генріхс

Хтось знає, яке розширення це для відстеження цих даних, які він надав на скріншоті?
AlexioVay

2
@NathanielHeinrichs +1 за "нішевий випадок", який мене клопоче останні два тижні. Це саме те, що відбувається зі мною, і тепер я знаю, чому! Дякую.
Маркус

Відповіді:


68

Схоже, ви досягаєте ліміту на з'єднання на одному сервері. Я бачу, що ви завантажуєте багато статичних файлів, і моя порада полягає в тому, щоб розділити їх на субдомени та обслуговувати їх безпосередньо, наприклад, з Nginx.

  • Створіть субдомен під назвою img.yoursite.com та завантажте звідти всі свої зображення.

  • Створіть субдомен під назвою scriptpts.yourdomain.com та завантажте звідти всі свої файли JS та CSS.

  • Створіть субдомен під назвою sounds.yoursite.com та завантажте звідти всі свої MP3 ... тощо.

У Nginx є чудові можливості для прямого обслуговування статичних файлів та кешування кешування статичних файлів.


11
Це нічого не змінює. Просто покладіть кілька підроблених доменів у файл хостів і використовуйте їх замість localhost.
Predte4a

Для мене не варіант. Я намагаюся подавати відео з домашнього сервера через Інтернет (коли я працюю).
Шрідхар Сарнобат

4
У випадку, коли httpd (тобто apache) може обробляти сотні симів. з'єднання, і лише Crome їх обмежує, це не є рішенням. У моєму випадку це 6 розеток на профіль, тож я можу відкрити ще 6 в анонімному профілі тощо. Це рішення stackoverflow.com/a/29639535/904846, яке може бути сприйнято як найкращу відповідь.
dmnc

145

Пояснення:

Ця проблема виникає, оскільки Chrome за замовчуванням дозволяє до 6 відкритих підключень. Отже, якщо ви потоково передаєте кілька мультимедійних файлів одночасно з 6 <video>або <audio>тегів, 7-е з'єднання (наприклад, зображення) просто зависне, поки не відкриється одна з розеток. Зазвичай відкрите з'єднання закриється через 5 хвилин бездіяльності, і саме тому ви бачите, що ваші .pngs нарешті завантажуються в цій точці.

Рішення 1:

Ви можете уникнути цього, мінімізуючи кількість медіа-тегів, які підтримують відкрите з'єднання. І якщо вам потрібно мати більше 6, переконайтесь, що ви остаточно завантажили їх, або у них немає таких атрибутів preload="auto".

Рішення 2:

Якщо ви намагаєтесь використовувати декілька звукових ефектів для веб-гри, ви можете скористатися API веб-аудіо . Або для спрощення речей просто використовуйте бібліотеку типу SoundJS , яка є чудовим інструментом для відтворення великої кількості звукових ефектів / музичних треків одночасно.

Рішення 3: Розеткові розетки (не рекомендується)

Якщо потрібно, ви можете змусити відкрити розетки у своєму браузері (лише в Chrome):

  1. Перейдіть до адресного рядка та введіть chrome://net-internals.
  2. Виберіть Socketsу меню.
  3. Натисніть на Flush socket poolsкнопку.

Це рішення не рекомендується, оскільки ви не повинні сподіватися, що ваші відвідувачі будуть дотримуватися цих інструкцій, щоб мати можливість переглядати ваш сайт.


13
Хоча прийнята відповідь давала загалом добру інформацію, це найкраща відповідь.
тако

1
Щойно встановлений Neo4J 3.0.4 та під час відкриття localhost: 7474 він пише, що чекає наявних сокетів, спробував флеш все ще не працює, і в списку пулів зазначено 6 активних та 2 очікують на цей сайт
Adeem

Промивання пул сокетів також не працює для мене (я граю невеликими шматочками з декількох <video>елементів HTML5 і натискаю межу.
Шрідар Шарнобат

У моєму випадку було відкрито багато вкладок, які запитували на сервер, закрили всі вкладки, і тепер це добре.
igaurav

Наше застаріле додаток запитувало зображення (масштабування / зменшення. Усі запити до цього сервера в Chrome були закріплені як "очікують на розгляд", і він буде надсилати назад код HTTP статусу 502 лише приблизно через дві хвилини. Це призвело до того, що програма не висить і не може запитувати зображення з нашого власного сервера, оскільки він був засмічений запитом цих зображень. Чудова відповідь - допоміг мені відстежити це!
Франциск Дін

13

Повідомлення:

Очікування наявної розетки ...

відображається, тому що ви досягли обмеження для ssl_socket_pool або на хост, проксі або групу.

Ось максимальна кількість HTTP-підключень, які ви можете встановити за допомогою браузера Chrome:

  • Максимальна кількість підключень на проксі - 32 з'єднання. Це можна змінити у списку політик .
  • Максимум на одного хоста: 6 підключень.

    Це, ймовірно, жорстко закодовано у вихідному коді веб-браузера, тому ви не можете його змінити.

  • Всього 256 HTTP-з'єднань, об’єднаних на один браузер.

Джерело: Корпоративна мережа для пристроїв Chrome

Вищезазначені межі можна перевірити або стерти в chrome://net-internals/#sockets(або в режимі реального часу chrome://net-internals/#events&q=type:SOCKET%20is:active).


Проблема зі звуком може бути пов’язана з помилкою Chrome 162627, коли аудіо HTML5 не завантажується, і він отримує максимум одночасних з'єднань на одному сервері: проксі. Це все ще активне питання на момент написання (2016).

Набагато старіша проблема, пов’язана з запитом на відеозапис HTML5, очікує на розгляд , тоді вона, ймовірно, пов’язана з випуском № 234779, який було виправлено 2014 року. І пов'язаним із SPDY, який можна знайти у випуску 324653: Проблема SPDY: очікування доступних сокетів , але це вже було виправлено у 2014 році, тому, ймовірно, це не пов’язано.

Інший пов'язаний випуск, який зараз позначений як дублікат, можна знайти у випуску 401845: Не вдалося попередньо завантажити аудіодані. Завантажено лише 6 з 10+, що було пов’язано з проблемою коду медіаплеєра, залишаючи навколо себе купу призупинених запитів.


Це також може бути пов’язано з деякими рекламними програмами або антивірусними розширеннями Chrome, що використовують ваші розетки у фоновому режимі (наприклад, Sophos чи Kaspersky ), тому перевірте, чи є мережа активністю в DevTools .


1
Як я можу змінити 6 на сервер на 8 на сервер, оскільки, здається, у деяких програмних програм я використовую потреби 8, в результаті 2 очікування залишається, а сайт ніколи не завантажується
Adeem

@Adeem Я не думаю, що ви можете це змінити, я вважаю, що це в кодовому коді у вихідному коді. Ви можете повідомити про це питання, описуючи конкретний сценарій.
kenorb

1
chrome: // net-Internals / # події & q = тип: SOCKET% 20є: активне посилання не оновлено в останньому Chrome
pyrytakala

6

просте і правильне рішення відкладено попереднє завантаження аудіо- та відеофайлу з налаштування та перевірте свою сторінку. Ваша проблема очікування наявного сокета буде вирішена ...

якщо ви використовуєте jplayer, тоді замініть попереднє завантаження: "метадані" на попереднє завантаження: "немає" від jplayer JS-файл ...

попереднє завантаження: "метадані" - це значення за замовчуванням, яке відтворює ваш аудіо / відео-файл при завантаженні сторінки, тому google chrome показує помилку "очікування доступного сокета"


0

Наша перша думка полягає в тому, що сайт не працює або подібне, але правда полягає в тому, що це не проблема чи інвалідність. Також це не є проблемою, оскільки просте підключення при тестуванні в Firefox, Opera або Explorer Explorer відкривається як звичайне.

Помилка в Chrome відображає знак із написом "Цей сайт недоступний" та уточнення з легендою "Помилка 15 (нетто: ERR_SOCKET_NOT_CONNECTED): Невідома помилка". Помилка є досить звичайною в Google Chrome, точніше в її оновленнях, і її вирішення полягає в перезавантаженні комп'ютера.

Оскільки часткових рішень не так багато, ми пропонуємо вам підручник для вирішення несправності менше ніж за хвилину. Щоб уникнути цієї проблеми та забезпечити нормальне відкриття служб у Google Chrome, слід вставити в адресний рядок наступне: chrome: // net-Internals (тоді дайте "Enter"). Потім вони повинні перейти до "Socket" у лівому меню та вибрати "Flush Socket Pools" (перегляньте такі скріншоти, щоб керувати http://www.fixotip.com/how-to-fix-error-waiting-for -available-sockets-in-google-chrome / ) Ця проблема вирішена, і більше не виникне проблем із доступом до Gmail, Google чи будь-яких служб гіганта Mountain View. Сподіваюся, ви знайшли корисним і поділитесь навчальним посібником, кому вони потрібні, або у соціальних мережах: Facebook, Twitter або Google+


0

Chrome - це браузер на базі Chromium, а браузери на основі Chromium дозволяють отримувати лише максимум 6 відкритих підключень розеток за один раз, коли 7-е з'єднання запускається, він просто сидіє в режимі очікування і чекає, коли один із 6, які працюють, припиниться, і тоді він буде почніть бігати. Отже, код помилки "чекає наявних сокетів" , 7-й буде чекати, коли один із цих 6 розеток стане доступним, і тоді він почне працювати.

Ви можете будь-який

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.