Chrome зависает после передачи определенного количества данных - ожидание доступного сокета

101

У меня есть браузерная игра, и я недавно начал добавлять в нее звук.

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

Через 5 минут (ровно) данные загружаются.

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

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

Этого не происходит ни в одном другом браузере.

Удаление одного MP3-файла (последнего добавленного) устранило проблему, возможно, это проблема ограничения данных?

Фоксхаунд
источник
1
Вы подали или нашли отчет об этом? Мы наблюдаем точно такое же поведение (необходимо проверить, совпадает ли количество запросов или переданных байтов, но в остальном поведение и ошибка точно совпадают)
января
1
Это похоже на известную проблему - см. Code.google.com/p/chromium/issues/detail?id=324653 Посмотрите code.google.com/p/chromium/issues/detail?id=324653, что именно происходит. Но если вы достигли предела открытых сокетов, то на самом деле даже другие браузеры имеют ограничение на количество подключений к одному домену. У вас есть два варианта: либо убедиться, что у вас всего несколько активных одновременных запросов (сериализовать их, не разделять); или разделите свой сервер на поддомены и отправьте запросы на разные поддомены.
Jan
5
Случай ниши, но если вы недавно перезапустили Chrome и открыли несколько вкладок для сервера, который требует базовой HTTP-аутентификации, вы можете получить эти ошибки, потому что на одной из фоновых вкладок появилось диалоговое окно аутентификации. Проверьте все остальные открытые вкладки соответствующего сайта, войдите в систему, если необходимо, и посмотрите, решена ли проблема.
Nathaniel Heinrichs
Кто-нибудь знает, какое это расширение для отслеживания данных, которые он предоставил на скриншоте?
AlexioVay 02
2
@NathanielHeinrichs +1 за "нишевый случай", который беспокоил меня последние 2 недели. Это именно то, что со мной происходит, и теперь я знаю почему! Спасибо.
Маркус

Ответы:

68

Похоже, вы достигли предела количества подключений на сервере. Я вижу, что вы загружаете много статических файлов, и я советую разделить их на поддомены и, например, обслуживать их напрямую с помощью Nginx.

  • Создайте поддомен img.yoursite.com и загрузите оттуда все свои изображения.

  • Создайте поддомен с именем scripts.yourdomain.com и загрузите оттуда все свои файлы JS и CSS.

  • Создайте поддомен под названием sound.yoursite.com и загрузите оттуда все свои MP3 ... и т. Д.

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

Predte4a
источник
11
Это ничего не меняет. Просто поместите несколько поддельных доменов в файл хостов и используйте их вместо localhost.
Predte4a 01
Не вариант для меня. Я пытаюсь передавать видео с домашнего сервера через Интернет (когда я на работе).
Шридхар Сарнобат
4
В случае, когда httpd (т.е. apache) может обрабатывать сотни sim. соединений и просто Crome их ограничивает, это не решение. В моем случае это 6 сокетов на профиль, поэтому я могу открыть еще 6 в анонимном профиле и т.д. Это решение stackoverflow.com/a/29639535/904846, которое может быть принято как лучший ответ.
dmnc
146

Пояснение:

Эта проблема возникает из-за того, что Chrome по умолчанию разрешает до 6 открытых подключений. Поэтому, если вы одновременно транслируете несколько медиафайлов из 6 <video>или <audio>тегов, 7-е соединение (например, изображение) просто зависнет, пока не откроется один из сокетов. Обычно открытое соединение закрывается через 5 минут бездействия, и поэтому вы видите, что в этот момент наконец загружаются ваши .png-файлы.

Решение 1:

Этого можно избежать, сведя к минимуму количество тегов мультимедиа, которые поддерживают открытое соединение. А если вам нужно их больше 6, убедитесь, что вы загружаете их последними или что у них нет таких атрибутов, как preload="auto".

Решение 2:

Если вы пытаетесь использовать несколько звуковых эффектов для веб-игры, вы можете использовать API веб-аудио . Или, чтобы упростить ситуацию, просто используйте библиотеку, такую ​​как SoundJS , которая является отличным инструментом для одновременного воспроизведения большого количества звуковых эффектов / музыкальных треков.

Решение 3. Принудительно открыть розетки (не рекомендуется)

При необходимости вы можете принудительно открыть сокеты в своем браузере (только в Chrome):

  1. Перейдите в адресную строку и введите chrome://net-internals.
  2. Выберите Socketsиз меню.
  3. Щелкните по Flush socket poolsкнопке.

Это решение не рекомендуется, потому что вы не должны ожидать, что посетители будут следовать этим инструкциям, чтобы просмотреть ваш сайт.

Marquizzo
источник
13
Хотя принятый ответ дал в целом хорошую информацию, это лучший ответ.
taco
1
Только что установил Neo4J 3.0.4 и при открытии localhost: 7474 он сообщает, что ожидает доступных сокетов, попытка сброса все еще не работает, а в списке пулов указано 6 активных и 2 ожидающих для этого сайта
Adeem
Очистка пулов сокетов у меня тоже не работает (я играю небольшие кусочки нескольких <video>элементов HTML5 и
достигаю
В моем случае было открыто много вкладок и опрос на сервере, все вкладки закрыты, и теперь все в порядке.
igaurav
Наше устаревшее приложение запрашивало изображения (увеличение / уменьшение.png и т. Д.) С общедоступного сервера (который, должно быть, перестал поддерживаться, что приводило к множеству отчетов об ошибках). Все запросы к этому серверу зависали как «Ожидающие» в 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 .

Kenorb
источник
1
Как я могу изменить 6 на сервер на 8 на сервер, поскольку кажется, что какое-то программное обеспечение, которое я использую, требует 8, в результате чего 2 остаются в ожидании, и сайт никогда не загружается
Адим,
@Adeem Я не думаю, что вы можете это изменить, я считаю, что это жестко запрограммировано в исходном коде. Вы можете сообщить об этой проблеме, описав свой конкретный сценарий.
kenorb
1
chrome: // net-internals / # events & q = type: SOCKET% 20is: активная ссылка не актуальна в последней
версии
6

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

если вы используете jplayer, замените preload : "metadata" на preload: "none" из jplayer JS файл ...

preload: "метаданные" - это значение по умолчанию, которое воспроизводит ваш аудио / видео файл при загрузке страницы, поэтому в Google Chrome отображается ошибка "ожидание доступного сокета"

Наджам Али Шахид
источник
0

Наша первая мысль заключается в том, что сайт не работает или что-то подобное, но правда в том, что проблема не в этом или нетрудоспособность. Это также не проблема, потому что простое соединение при тестировании в Firefox, Opera или Services Explorer открывается как обычно.

Ошибка в Chrome отображает значок с надписью «Этот сайт недоступен» и пояснение с легендой «Ошибка 15 (net :: 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 или любым службам гиганта Маунтин-Вью. Надеюсь, вы сочли это полезным и поделитесь учебником с тем, кому они нужны, или в социальных сетях: Facebook, Twitter или Google+.

Джон
источник
0

Chrome - это браузер на основе Chromium, а браузеры на основе Chromium допускают одновременно не более 6 открытых соединений сокетов, когда запускается 7-е соединение, оно просто будет бездействовать и ждать остановки одного из 6 работающих, а затем начать бежать. Следовательно, код ошибки «ожидание доступных сокетов» , 7-й будет ждать, пока один из этих 6 сокетов станет доступным, и затем он начнет работать.

Вы также можете

Яш
источник