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


101

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

Chrome不会加载整个页面,并且会卡在其中"91 requests | 8.1 MB transferred",并且不会加载任何其他内容;甚至在其他所有标签中都破坏了该网站Waiting for available socket

5分钟后(准确),数据被加载。

在此处输入图片说明

在此处输入图片说明

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

删除一个MP3文件(最新添加的一个)可以解决此问题,那么这是否可能是数据限制问题?


1
您是否为此提出了文件或找到了错误报告?我们看到的行为完全相同(需要检查请求数或传输的字节数是否匹配,否则行为和错误完全匹配)
1

1
这似乎是一个已知问题-请参阅code.google.com/p/chromium/issues/detail?id=324653来 查看code.google.com/p/chromium/issues/detail?id=324653到底是什么情况。但是,如果您达到了打开的套接字的限制,那么实际上甚至其他浏览器也会限制到单个域的连接数。您有两种选择-确保您只有很少的同时请求处于活动状态(序列化它们;不并行处理);或者 或将您的服务器拆分为多个子域,然后向不同的子域发出请求。
1

5
适当的情况,但是如果您最近重新启动了Chrome并向需要基本HTTP身份验证的服务器打开了多个选项卡,则可能会出现这些错误,因为其中一个背景选项卡已弹出身份验证对话框。检查相关站点的所有其他打开的选项卡,根据需要登录,然后查看问题是否已解决。
纳撒尼尔·海因里希斯

有人知道这是什么扩展名以跟踪屏幕快照中提供的这些数据吗?
AlexioVay '17

2
@NathanielHeinrichs +1了“小众案例”,在过去的两个星期里一直困扰着我。这正是发生在我身上的事情,现在我知道为什么了!谢谢。
Marcus

Answers:


68

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

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

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

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

Nginx有很多直接提供静态文件和管理静态文件缓存的选项。


11
这不会改变任何东西。只需在您的主机文件中放入一些假域名,然后使用它们代替localhost。
Predte4a 2014年

对我来说不是一个选择。我正在尝试通过网络从家庭服务器上提供视频(当我工作时)。
Sridhar Sarnobat '16

4
万一httpd(即apache)可以处理数百个sim。连接,只是Crome限制了它们,这不是解决方案。在我的情况下,每个配置文件有6个套接字,因此我可以在匿名配置文件中再打开6个套接字,等等。这是一个解决方案stackoverflow.com/a/29639535/904846,可能被认为是最佳答案。
dmnc

145

说明:

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

解决方案1:

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

解决方案2:

如果您想在网络游戏中使用多种音效,则可以使用Web Audio 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

法拉盛插座池不工作对我来说是(我玩小件等多个HTML5的<video>元素,打了极限。
斯瑞达Sarnobat

在我的情况下,有许多选项卡打开并轮询服务器,关闭了所有选项卡,现在情况很好。
igaurav

我们的旧版应用程序一直在从公共服务器(必须停止支持该图像,从而导致大量错误报告)中请求图像(zoom in / out.png等)。在Chrome中,对该服务器的所有请求均被标记为“待处理”,并且仅在大约两分钟后才会发送回HTTP状态代码502。这导致应用程序挂起,无法从我们自己的服务器请求图像,因为它阻塞了请求这些图像的过程。很好的答案-帮助我找到了答案!
弗朗西斯·迪恩

13

消息:

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

之所以显示,是因为您已达到每个主机,代理或组对ssl_socket_pool的限制。

以下是您可以通过Chrome浏览器建立的HTTP连接的最大数量:

  • 每个代理的最大连接数为32个连接。可以在“ 策略列表”中进行更改。
  • 每个主机最多:6个连接。

    这可能是硬编码在Web浏览器的源代码中的,因此您不能更改它。

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

来源:Chrome设备的企业网络

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


您的音频问题可能与Chrome错误162627有关,在Chrome错误162627中,HTML5音频无法加载,并且达到了每个服务器(代理)的最大同时连接数。在撰写本文时(2016年),这仍然是活跃的问题。

HTML5视频请求有关的更老的问题处于待处理状态,那么可能与#234779有关,该问题已在2014年修复。与SPDY有关,可以在问题324653中找到:SPDY问题:等待可用的套接字,但此问题已得到解决。在2014年,所以可能没有关系。

现在可以在问题401845中找到其他标记为重复的相关问题:无法预加载音频元数据。仅加载了10个中的6个,这与媒体播放器代码问题有关,留下了许多暂停的请求。


这也可能与某些在后台使用套接字的Chrome广告软件或防病毒扩展程序有关(例如SophosKaspersky),因此请在DevTools中检查网络活动。


1
我如何将每台服务器的6更改为每服务器8,因为我使用的某些软件似乎需要8,导致2待处理且站点从未加载
Adeem

@Adeem我认为您无法更改它,我相信它已在源代码中进行了硬编码。您可以报告描述您的特定方案的问题。
kenorb

1
chrome:// net-internals /#events&q = type:SOCKET%20is:最新的Chrome浏览器中的活动链接不是最新的
pyrytakala

6

简单正确的解决方案是推迟从设置中预加载音频和视频文件并重新检查页面,从而解决了等待可用套接字的问题...

如果您使用jplayer,然后从jplayer 替换preload:“ metadata”preload:“ none” JS文件...

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


0

我们首先想到的是站点已关闭或类似原因,但事实是这不是问题或残障。这也不是问题,因为在Firefox,Opera或services Explorer中测试时,简单连接正常打开。

Chrome中的错误显示一个标有“此站点不可用”的符号,并带有图例“错误15(net :: ERR_SOCKET_NOT_CONNECTED):未知错误”的说明。该错误在Google Chrome浏览器中非常常见,更确切地说是在更新中,并且解决方法是重新启动计算机。

由于部分解决方案并不多,我们提供了一个教程,可在不到一分钟的时间内为您解决故障。为避免此问题并确保在Google Chrome中正常打开服务,应在地址栏中插入以下内容:chrome:// net-internals(然后输入“ Enter”)。然后,他们必须转到左侧菜单中的“套接字”,然后选择“刷新套接字池”(请参阅​​以下屏幕快照,以指导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个正在运行的连接之一停止,然后它将开始运行。因此,错误代码“ waiting for available sockets”,第7个将等待这6个套接字之一变为可用,然后它将开始运行。

你可以

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.