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

Fox*_*ndn 98 sockets streaming networking google-chrome http

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

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

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

在此输入图像描述

在此输入图像描述

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

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

Mar*_*zzo 138

说明:

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

解决方案1:

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

解决方案2:

如果您正在尝试为网页游戏使用多种声音效果,我强烈建议您使用SoundJS它是同时播放大量音效/音乐曲目的绝佳工具.

解决方案3:强制打开插座(不推荐)

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

  1. 转到地址栏并键入chrome://net-internals.
  2. 在下拉菜单中,选择Sockets.
  3. 单击Flush socket pools按钮.

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

  • 虽然接受的答案总体上给出了很好的信息,但这是最好的答案. (13认同)

Pre*_*e4a 66

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

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

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

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

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

  • 这不会改变任何事情.只需在主机文件中放入一些假域,然后使用它们而不是localhost. (11认同)
  • 如果httpd(即apache)可以处理数百个sim.连接只是Crome限制它们,这不是一个解决方案.在我的情况下,每个配置文件是6个套接字,所以我可以在匿名配置文件等中打开6个以上.这是一个解决方案http://stackoverflow.com/a/29639535/904846,这可能被接受为最佳答案. (3认同)

ken*_*orb 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有关,其中HTML5音频无法加载,并且每个服务器都会达到最大同时连接数:代理.在撰写本文时(2016年),这仍然是一个活跃的问题.

HTML5视频请求相关的许多旧问题保持待定,然后它可能与2014年修复的问题#234779有关.与SPDY有关,可以在问题324653中找到:SPDY问题:等待可用的套接字,但这已经修复在2014年,可能它没有相关性.

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


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


小智 6

简单,正确的办法是推迟从设置预加载音频和视频文件,并重新检查你的页面的等待可用的套接字问题会得到解决......

如果你使用jplayer然后更换预载:"元数据",以预载:"无"从jplayer JS文件...

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