5

我正在制作一个与长轮询一起使用的聊天应用程序,以模拟从服务器到客户端的“推送”。

基本上,浏览器会要求更新,如果有新内容我会回复。否则,我会保持连接打开而不响应,直到有东西要发回。

现在,如果 30 秒过去了,我还没有发送任何东西,那么我会发送一个响应,基本上是“NoNews”,客户端将再次轮询。

我想要做的显然是在浏览器超时并放弃我之前尽可能长时间地保持这种连接而不回复......我还没有找到关于每个浏览器的客户端超时是什么的好文档,而且似乎对所有人来说都不一样...

你们中有人提出过长轮询申请吗?
任何想法最长的安全超时可能是什么?

谢谢!

4

2 回答 2

2

浏览器应该检测到 XHR 的超时并发出另一个请求。

更新:

在 XHR 上检测超时实际上很复杂,因为它由于某种原因不是内置的。当然,您还需要处理 502/503 响应等。

于 2009-08-26T23:31:13.033 回答
1

读取超时因浏览器而异。例如,这些是 IE 的默认值,

Internet Explorer 4.0 and Internet Explorer 4.01 - 5 minutes
Internet Explorer 5.x and Internet Explorer 6.x - 60 minutes
Internet Explorer 7 and Internet Explorer 8 - 60 minutes

正如你所看到的,它的加班时间变大了。

在长轮询中,超时是你的朋友。你应该利用它,而不是避免它。超时意味着您正在使用浏览器进行最长的轮询。超时是一个即使没有长轮询也必须处理的错误,因此没有额外的负担。

您可能想阅读我对这个问题的回答,

从 J2ME 客户端轮询 HTTP 服务器

即使它是针对移动客户端的,大多数规则也适用于 AJAX 长轮询。具体来说,我认为您将从通知系统中受益,因此长轮询仅用于事件通知,并且所有内容仍可正常拉取。

于 2009-08-27T00:09:53.593 回答