【问题标题】:RequestBuilder timeouts and browser connection limits per domain每个域的 RequestBuilder 超时和浏览器连接限制
【发布时间】:2011-02-27 10:28:28
【问题描述】:

这专门针对 GWT 的 RequestBuilder,但也应该适用于一般的 XHR。我的公司让我通过 HTTP 构建一个近乎实时的聊天应用程序。是的,我确实意识到有更好的方法来进行聊天应用程序,但这正是他们想要的。最终我们希望它也能在 iPad/iPhone 上运行,所以 flash 已经不存在了,我认为这也排除了 websockets 和 comet?

无论如何,我遇到了一些问题,即我已将 GWT 的 RequestBuilder 超时设置为 10 秒,并且我们得到了非常随机和零星的超时。我们在服务器端进行了错误处理和电子邮件发送,并且从未收到任何错误,这表明 RequestBuilder 所基于的底层 XHR 请求永远不会到达服务器并在 10 秒后超时。

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

现在我的问题是 - 如果我构造一个 RequestBuilder 并调用它的 send() 方法并且浏览器阻止它发送,直到每个域的 2 个连接之一空闲,在请求被阻止或它会在浏览器真正释放底层 XHR 之前启动吗?

我希望这很清楚,如果没有,请告诉我,我会尽力解释更多。

【问题讨论】:

    标签: gwt xmlhttprequest


    【解决方案1】:

    在 GWT 孵化器文档页面上有一篇解释 server push 的文章。 使用上述技术,您只需要始终打开一个连接。

    【讨论】:

    • 还有一个关于它的问题;)stackoverflow.com/questions/2391203/…
    • +1 用于提供一些替代解决方案,但是我们已经讨论过推送或长轮询,老板还不想走这条路。不过,如果我们不能提高我们现在正在做的事情的性能和稳定性,我怀疑我会这样做。
    【解决方案2】:

    浏览器只允许每个主机名 2 个连接;现在已经改变了。 “现代”浏览器最多允许 6 个同时连接 - 它因浏览器而异。请参阅http://www.browserscope.org/ - 网络选项卡。

    关于计时器,它在 GWT 调用xhr.send() 之前启动,所以你的怀疑是正确的。如果您想追踪它,请参阅 Request.java 和 RequestBuilder.java。

    【讨论】:

    • 我选择了这个作为答案,因为它回答了我的具体要求,并添加了有关如何跟踪功能并查看它如何在不同浏览器中工作的附加信息。谢谢!
    【解决方案3】:

    似乎有一半的时间,您一发布就回答自己的问题。

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

    待处理请求限制 - 现代网络浏览器在任何时候都被限制为只有两个未完成的 HTTP 请求。如果您的服务器遇到阻止其发送响应的错误,它可能会占用您未完成的请求。如果您对此感到担忧,您始终可以通过 RequestBuilder.setTimeoutMillis(int) 为请求设置超时。

    【讨论】:

      猜你喜欢
      • 2020-10-10
      • 2012-09-25
      • 2014-09-18
      • 2020-12-20
      • 1970-01-01
      • 2014-05-16
      • 1970-01-01
      • 2014-03-12
      • 1970-01-01
      相关资源
      最近更新 更多