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

问题描述 投票:94回答:5

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

Chrome不会加载整个页面并卡在"91 requests | 8.1 MB transferred"并且不会加载任何更多内容甚至在所有其他标签中填写网站说Waiting for available socket

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

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

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

sockets google-chrome http networking streaming
5个回答
66
投票

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

  • 创建一个名为img.yoursite.com的子域,并从那里加载所有图像。
  • 创建一个名为scripts.yourdomain.com的子域,并从那里加载所有JS和CSS文件。
  • 创建一个名为sounds.yoursite.com的子域名,然后从那里加载所有的MP3 ......等等。

Nginx有很好的选择,可以直接提供静态文件和管理静态文件缓存。


137
投票

说明:

出现此问题的原因是默认情况下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按钮。

建议不要使用此解决方案,因为您不应期望访问者按照这些说明查看您的网站。


12
投票

消息:

等待可用插座......

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

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

  • 每个代理的最大连接数为32个连接。这可以在Policy List中更改。
  • 每台主机最多:6个连接。 这很可能是在Web浏览器的源代码中硬编码的,因此您无法对其进行更改。
  • 每个浏览器共有256个HTTP连接。

资料来源:Enterprise networking for Chrome devices

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


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

很多老问题与HTML5 video request stay pending相关,那么它可能与2014年修复的Issue #234779有关。与SPDY有关,可以在Issue 324653: SPDY issue: waiting for available sockets找到,但这已经在2014年修复,所以可能它没有关系。

现在标记为重复的其他相关问题可以在Issue 401845: Failure to preload audio metadata. Loaded only 6 of 10+中找到,这与媒体播放器代码的问题有关,留下了一堆暂停的请求。


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


6
投票

简单而正确的解决方案被推迟预装您的音频和视频文件,并设置并重新检查您的页面等待可用套接字的问题将得到解决... 如果你使用jplayer然后替换preload:“metadata”来预加载:来自jplayer JS文件的“none”... 预加载:“元数据”是在页面加载时播放音频/视频文件的默认值,这就是google chrome显示“等待可用套接字”错误的原因


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

© www.soinside.com 2019 - 2024. All rights reserved.