这是关于GWT的RequestBuilder,但也应该适用于一般的XHR。我的公司让我通过HTTP构建一个近乎实时的聊天应用程序。是的,我确实知道有更好的方法来做聊天应用程序,但这就是他们想要的。最终我们希望它能够在iPad / iPhone上工作,所以闪存出来了,我认为它排除了网页插座和彗星?
无论如何,我遇到的问题是我将GWT的RequestBuilder超时设置为10秒,我们得到了非常随机和零星的超时。我们在服务器端有错误处理和电子邮件,并且从未得到任何错误,这表明构建了RequestBuilder的基础XHR请求,从未到达服务器并在10秒后超时。
我们正在使用这些请求来经常轮询服务器以获取新消息,还用于向服务器发送新消息以及轮询(不太频繁)其他应用程序部分。我害怕的是,我们在同一个域的并发连接上遇到浏览器限制(默认情况下为2个?)。
现在我的问题是 - 如果我构造一个RequestBuilder并调用它的send()方法并且浏览器阻止它发送,直到每个域的2个连接中的一个是空闲的,那么当请求被阻止时,超时是否仍然开始它会不会启动,直到浏览器实际释放基础XHR?
我希望这很清楚,如果不是,请告诉我,我会尝试解释更多。
答案 0 :(得分:2)
在GWT Incubator doc页面上有一篇解释server push的文章。 使用所述技术,您只能始终打开一个连接。
答案 1 :(得分:1)
浏览器每个主机名只允许2个连接;现在已经改变了。 “现代”浏览器允许最多6个同时连接 - 它因浏览器而异。请参阅http://www.browserscope.org/ - 网络标签。
关于计时器,它在 GWT调用xhr.send()
之前启动,所以你的怀疑是正确的。如果要跟踪它,请参阅Request.java和RequestBuilder.java。
答案 2 :(得分:0)
似乎有一半时间,你发布后立即回答你自己的问题。
等待申请限额 - 现代Web浏览器仅限于在任何时候只有两个未完成的HTTP请求。如果您的服务器遇到阻止其发送响应的错误,则可能会占用您的未完成请求。如果您担心这一点,您可以始终通过RequestBuilder.setTimeoutMillis(int)为请求设置超时。