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

标签 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 文件(最新添加的一个)解决了问题,这可能是数据限制问题吗?

最佳答案

解释:

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

解决方案一:

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

解决方案 2:

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

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

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

  1. 转到地址栏并输入 chrome://net-internals .
  2. 选择 Sockets从菜单中。
  3. 点击 Flush socket pools按钮。

不推荐使用此解决方案,因为您不应期望访问者遵循这些说明才能查看您的网站。

关于sockets - 传输一定数量的数据后 Chrome 挂起 - 等待可用的套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23679968/

相关文章:

java - 我需要使用 ProxySelector 来检测代理设置的帮助

c - 确定网络接口(interface)是无线的还是有线的

java - 套接字超时在 Servlet 中不起作用

html - Webkit 浏览器中的额外空间? (Chrome 和 Safari)

javascript - Chrome 不遵守 z-index 顺序

ruby - 是否有带有响应缓存的 Ruby http 客户端库?

c - 如何初始化缓冲区

objective-c - 在 Cocoa 应用程序上调用 CFRunLoop 系列

javascript - 如何做 HTML 谷歌多级条目?

windows - 为什么无法使用任何端口连接到 127.0.0.1 上的 http 服务绑定(bind)