代码之家  ›  专栏  ›  技术社区  ›  WesleyJohnson

每个域的RequestBuilder超时和浏览器连接限制

  •  2
  • WesleyJohnson  · 技术社区  · 14 年前

    这是关于GWT的RequestBuilder的,但也应该应用于一般的XHR。我的公司让我通过HTTP构建一个近乎实时的聊天应用程序。是的,我确实意识到有更好的方式来做聊天申请,但这是他们想要的。最终我们希望它也能在ipad/iphone上运行,所以flash就不在了,我想,它也排除了websockets和comet?

    不管怎样,如果我将GWT的RequestBuilder超时设置为10秒,我们会遇到一些非常随机和偶发的超时问题。我们在服务器端进行了错误处理和电子邮件发送,并且从未收到任何错误,这表明构建了RequestBuilder的基础XHR请求从未到达服务器,10秒后超时。

    我们经常使用这些请求来轮询服务器上的新消息,也可以向服务器发送新消息,还可以轮询(不太频繁)应用程序的其他部分。我担心的是,我们遇到浏览器限制了同一域的并发连接(默认情况下为2个IE?).

    现在我的问题是-如果我构造了一个requestbuilder并调用它的send()方法,并且浏览器阻止它发送,直到每个域的2个连接中的一个空闲为止,那么在请求被阻止时是否仍然会启动超时,或者直到浏览器实际释放底层的xhr之后才会启动超时?

    我希望这是清楚的,如果不是请让我知道,我会尽力解释更多。

    3 回复  |  直到 14 年前
        1
  •  1
  •   Sripathi Krishnan    14 年前

    浏览器只允许每个主机名有2个连接;现在已经更改了。现代的浏览器允许多达6个同时连接-不同浏览器之间的连接不同。见 http://www.browserscope.org/ -网络选项卡。

    关于计时器,它启动 之前 GWT调用 xhr.send() 所以你的怀疑是对的。如果您想跟踪它,请参见request.java和requestbuilder.java。

        2
  •  2
  •   Gipsy King    14 年前

    GWT孵化器文档页面上有一篇文章解释 server push . 使用所述技术,您始终只能保持一个连接打开。

        3
  •  0
  •   WesleyJohnson    14 年前

    好像有一半时间,你一发帖就回答自己的问题。

    通过: http://google-web-toolkit.googlecode.com/svn/javadoc/1.6/com/google/gwt/http/client/package-summary.html

    挂起请求限制 -现代的Web浏览器在任何时候都只能有两个未完成的HTTP请求。如果您的服务器遇到了阻止其发送响应的错误,那么它可能会阻塞未完成的请求。如果您关心这个问题,您可以通过requestbuilder.setTimeoutMillis(int)为请求设置超时。