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

时间:2014-05-15 13:38:49

标签: sockets google-chrome http networking streaming

我有一个浏览器游戏,我最近开始为游戏添加音频。

Chrome不会加载整个页面并停留在"91 requests | 8.1 MB transferred"并且不会加载任何其他内容,甚至会在所有其他标签Waiting for available socket中对网站进行制动。

5分钟后(确切地)加载数据。

enter image description here

enter image description here

任何其他浏览器都不会发生这种情况。

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

6 个答案:

答案 0 :(得分:133)

<强>解释

出现此问题是因为Chrome默认情况下最多允许6个打开的连接。因此,如果您同时从6个<video><audio>标记流式传输多个媒体文件,则第7个连接(例如,图像)将挂起,直到其中一个套接字打开。通常情况下,打开的连接会在闲置5分钟后关闭,这就是为什么你看到你的.png最终加载的原因。

解决方案1:

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

解决方案2:

如果您尝试为网页游戏使用多种音效,则可以使用Web Audio API。或者为了简化操作,只需使用像SoundJS这样的库,这是一个同时播放大量音效/音乐曲目的绝佳工具。

解决方案3:强制打开套接字(不推荐)

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

  1. 转到地址栏并输入chrome://net-internals
  2. 从菜单中选择Sockets
  3. 点击Flush socket pools按钮。
  4. 建议不要使用此解决方案,因为您不应期望访问者按照这些说明查看您的网站。

答案 1 :(得分:63)

看起来您正在达到每台服务器连接的限制。我看到你正在加载很多静态文件,我的建议是在子域上将它们分开,并直接用Nginx提供它们。

  • 创建名为 img.yoursite.com 的子域名并加载所有图片 从那里。

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

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

Nginx提供了直接提供静态文件和管理静态文件缓存的绝佳选择。

答案 2 :(得分:12)

消息:

  

等待可用的套接字......

显示

,因为您已经按照主机,代理或组对ssl_socket_pool达到了限制。

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

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

    这可能是在网络浏览器的源代码中硬编码的,因此您无法对其进行更改。

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

来源:Enterprise networking for Chrome devices

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

您的音频问题可能与{* 3}}相关,其中HTML5音频无法加载,并且它会达到每台服务器的最大同时连接数:代理。在撰写本文时(2016年),这仍然是一个活跃的问题。

Chrome bug 162627相关的旧问题很多,那么它可能与2014年修复的HTML5 video request stay pending有关。与SPDY有关,可以在Issue #234779找到,但是这已经在2014年修复,所以可能它没有关联。

现在标记为重复的其他相关问题可以在Issue 324653: SPDY issue: waiting for available sockets中找到,该问题与媒体播放器代码的问题有关,留下了一堆暂停的请求。

这也可能与使用背景中的套接字的某些Chrome广告软件或防病毒扩展相关(例如 Sophos Issue 401845: Failure to preload audio metadata. Loaded only 6 of 10+),因此请检查网络 DevTools 中的活动。

答案 3 :(得分:6)

简单而正确的解决方案被推迟预设您的音频和视频文件,并重新检查您的页面等待可用插座的问题将得到解决...

如果您使用jplayer,则将预加载:“元数据”替换为预加载:“无”来自jplayer JS文件...

预加载:“元数据”是在页面加载时播放音频/视频文件的默认值,这就是谷歌浏览器显示“等待可用套接字”错误的原因

答案 4 :(得分:0)

我们首先想到的是网站是关闭还是类似,但事实是,这不是问题或残疾。这也不是一个问题,因为在Firefox,Opera或服务资源管理器上测试时的简单连接正常打开。

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或Mountain View巨头的任何服务的问题。我希望你发现它很有用,并与他们需要的人或社交网络分享教程:Facebook,Twitter或Google +。

答案 5 :(得分:0)

Chrome是基于Chromium的浏览器,基于Chromium的浏览器一次最多只允许6个打开的套接字连接,当第7个连接启动时,它将处于空闲状态并等待6个正在运行的停止和停止连接。然后它将开始运行。 因此,错误代码“正在等待可用的套接字” ,第7个将等待这6个套接字之一变为可用,然后它将开始运行。

您可以