Http-bind 耗时 6000 毫秒

Http-bind taking 6000ms

我有一个使用 PHP、javascript 和 jQuery 编程的 CRM。我们还有一个 XMPP 和 http-bind 用于 voip。

我的问题是:当我加载 CRM 时,前几个 http-bind 需要正常时间(<50 毫秒),之后它们总是需要大约 6000 毫秒。

此代码分为多个文件,而且很多。我真的不知道要添加哪一部分代码,所以我现在就省略代码并在需要时添加部分代码。

我对 http-binding 和 XMPP 还很陌生,遗憾的是找不到任何有用的东西,所以我很感激任何信息或帮助。

日志:

提前致谢!

提供信息的三个事实:

  1. Firefox 默认情况下每个服务器最多有 8 个连接。这是可配置的,但如果您更改,请小心。 http://kb.mozillazine.org/Network.http.max-connections-per-server。 (注意:我认为最大值不是 15 个持久连接,但看起来您使用的不是最新的 Firefox 或开发插件?)

  2. 默认情况下,持久连接(即与保持打开状态且可重复使用的服务器的连接 - 参见 https://en.wikipedia.org/wiki/HTTP_persistent_connection)在关闭前保持打开状态 60 秒。

  3. 浏览器进行了 8 个并发调用,然后等待 60 秒再进行下一个调用。

应该发生什么:

  1. 浏览器打开(最多)8 个连接并发出(最多)8 个并行请求。
  2. 响应请求后,浏览器将重新使用相同的连接。
  3. 否则,它将发出 "keep-alive" 告诉服务器保持连接打开。
  4. 如果连接未使用 X 秒(X 取决于服务器)并且没有收到保持连接,服务器将关闭连接。

您失败的地方是步骤 (2),浏览器没有重新使用相同的连接。然后它无法在打开 8 个连接时进行第 9 次调用

所以浏览器无法重新使用连接但发送 "keep-alives" 最多 60 秒然后停止(因此服务器关闭连接)或者浏览器无法关闭连接和服务器配置为 60 秒超时(这是巨大的!)

解决方案

  1. 我认为浏览器和服务器不太可能都损坏/配置错误,而且看起来您使用的是旧版本的 Firebug(或某些克隆或插件另一个浏览器)从那里开始?为了测试,更改浏览器和调试工具:

    • If Firebug: 这不再被开发所以你应该开始使用 内置 FireFox 开发工具(但如果失败,请完全尝试其他浏览器)

    • 如果 Chrome 或 Edge,请使用其内置工具。

    • 或者,使用 Fiddler (windows) 或 Charles (Mac)。但是,记得也试试其他浏览器。

  2. 您的替代方法是关闭 keep-alives/persistent 连接并检查服务器是否配置了 <60 秒超时。有点复杂,所以从浏览器和调试工具开始。