Chrome在一定数量的数据传输后挂起 – 等待可用套接字

我有一个浏览器游戏,我最近开始添加audio到游戏中。

Chrome浏览器并没有加载整个页面,并在"91 requests | 8.1 MB transferred"卡住,并且不会加载任何更多的内容,甚至在所有其他标签中显示Waiting for available socket

5分钟后(正好)数据被加载。

在这里输入图像说明

在这里输入图像说明

这在任何其他浏览器上都不会发生。

删除一个MP3文件(最新添加的一个)修复了这个问题,所以我猜想它的一个数据限制问题?

看起来你是按每个服务器的限制连接。 我看到你正在加载大量的静态文件,我的build议是将它们分开在一个子域中,并用Nginx直接提供。

  • 创build一个名为img.yoursite.com的子域,并从那里加载所有图像。

  • 创build一个名为scripts.yourdomain.com的子域,并从那里加载所有的JS和CSS文件。

  • 创build一个名为sounds.yoursite.com的子域,并从那里加载所有的MP3 …等等。

Nginx具有直接提供静态文件和pipe理静态文件caching的好select。

说明:

发生此问题是因为默认情况下,Chrome最多允许6个打开的连接。 所以,举个例子来说,如果你从6个<video>或者<audio>标签中同时传输多个媒体文件,那么第7个连接(例如图像)就会挂起,直到其中一个sockets打开。 通常情况下,一个打开的连接将在5分钟不活动后closures,这就是为什么你看到你的PNG终于在这一点上加载。

解决scheme1:

您可以通过最小化保持打开连接的媒体标记的数量来避免这种情况。 如果您需要超过6个,请确保最后加载它们,或者它们没有像preload="auto"这样的属性。

解决scheme2:

如果您想要在网页游戏中使用多种声音效果,我强烈build议您使用SoundJS。这是一个用于同时播放大量声音效果/音乐曲目的好工具。

解决scheme3:强制打开套接字 (不推荐)

如果必须,您可以强制打开浏览器中的套接字(仅限Chrome):

  1. 转到地址栏并inputchrome://net-internals
  2. 在下拉菜单中,selectSockets
  3. 点击Flush socket poolsbutton。

不build议使用此解决scheme,因为您不应该指望访问者按照这些说明来查看您的网站。

消息:

等待可用的套接字…

因为你已经达到了每个主机,代理或者组的ssl_socket_pool的限制。

以下是您可以使用Chrome浏览器进行的HTTP连接的最大数量:

  • 每个代理的最大连接数是32个连接。 这可以在Policy List中更改。
  • 每个主机的最大数量:6个连接

    这可能是硬编码的网页浏览器的源代码,所以你不能改变它。

  • 每个浏览器共有256个HTTP连接。

来源: Chrome设备的企业networking

上述限制可以在chrome://net-internals/#sockets (或者在chrome://net-internals/#events&q=type:SOCKET%20is:active )中实时检查或刷新。


您的audio问题可能与Chrome的缺陷162627有关 ,HTML5audio无法加载,并且每个服务器的代理服务器同时访问的连接数最高。 在撰写本文时(2016年),这仍然是一个活跃的问题。

与HTML5video请求相关的许多旧问题仍然未决 ,则可能与2014年已修复的问题#234779有关。与SPDY相关的问题可以在问题324653中find:SPDY问题:正在等待可用套接字 ,但已经修复在2014年,所以可能是没有关系的。

现在标记为重复的其他相关问题可以在问题401845中find:未预先加载audio元数据。 只装载了10个中的6个,这与媒体播放器代码的问题相关,留下了一堆暂停的请求。


这也可能与某些Chrome广告软件或在背景中使用套接字的防病毒扩展(如SophosKaspersky )相关,因此请检查DevTools中的 networking活动。

简单而正确的解决scheme是推迟预载你的audio和video文件的设置和重新检查你的页面等待可用套接字的问题将解决… … –

如果您使用jplayer然后replacepreload:“元数据” 预加载:“无”从jplayer JS文件…

预加载:“元数据”是在页面加载播放您的audio/video文件的默认值这就是为什么谷歌铬显示“等待可用套接字”错误