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

Gwt 每个域的RequestBuilder超时和浏览器连接限制,gwt,xmlhttprequest,Gwt,Xmlhttprequest,这是专门针对GWT的RequestBuilder的,但也应该适用于一般的XHR。我的公司让我在HTTP上构建一个近乎实时的聊天应用程序。是的,我知道有更好的方法来做聊天应用,但这正是他们想要的。最终我们希望它也能在iPad/iPhone上运行,这样flash就不存在了,我想这也排除了websockets和comet的存在 无论如何,我遇到了一些问题,我将GWT的RequestBuilder超时设置为10秒,我们得到了非常随机和零星的超时。我们在服务器端进行了错误处理和电子邮件发送,但从未收到任何

这是专门针对GWT的RequestBuilder的,但也应该适用于一般的XHR。我的公司让我在HTTP上构建一个近乎实时的聊天应用程序。是的,我知道有更好的方法来做聊天应用,但这正是他们想要的。最终我们希望它也能在iPad/iPhone上运行,这样flash就不存在了,我想这也排除了websockets和comet的存在

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

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

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


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

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

通过:

未决请求限制
-现代web浏览器被限制为在同一时间只有两个未完成的HTTP请求。如果您的服务器遇到错误,无法发送响应,则可能会阻塞未完成的请求。如果您关心这个问题,您可以始终通过RequestBuilder.setTimeoutMillis(int)为请求设置超时

浏览器每个主机名只允许2个连接;现在情况已经改变了。”现代的浏览器允许多达6个同时连接-不同浏览器之间的连接不同。请参阅-网络选项卡


至于计时器,它在GWT调用
xhr.send()
之前启动,因此您的怀疑是对的。如果您想追踪它,请参阅Request.java和RequestBuilder.java。

GWT孵化器文档页面上有一篇文章解释了这一点。
使用上述技术,您只能始终保持一个连接处于打开状态。

而且还有一个关于它的问题;)+1为提供一些替代解决方案,但是我们已经讨论过做推送或长轮询,老板还不想走这条路。不过,如果我们不能提高我们现在所做的工作的性能和稳定性,我怀疑我会这样做。我选择这一个作为答案,因为我的问题得到了明确的回答,并添加了有关如何跟踪功能以及如何在不同浏览器间工作的其他信息。谢谢