不同浏览器的超时行为?

Fan*_*Lin 5 browser ajax timeout comet

我正在写一个基于AJAX/COMET的在线聊天室.我的设计是:

请求

-----------------等待------------------------->发送转储数据

-----------------等待------------------------->发送转储数据

-----------------等待------------------------->发送转储数据

-----------------等待------------------------->发送转储数据

-----------------等待------------------------->发送转储数据

------发生了什么事,得到回应.

另一个要求..... ....

如您所见,服务器保留请求并等待发生的事情,如果发生了某些事件,只需推送数据并完成请求.然后客户端将发出另一个请求.在请求中有勾选,因此如果在两个请求的间隙之间发生事件,则服务器知道客户端有待处理的事件.

在浏览器超时之前,服务器还会发送一些空闲数据以防止客户端超时.

现在,问题出现了:不同浏览器的超时行为是什么?我知道浏览器发送请求并等待数据,如果等待时间太长,它会超时.但是不同浏览器的超时行为是什么?是否有任何标题可以控制浏览器的超时行为?通过了解浏览器的超时行为,以便我可以决定如何处理它们.我在哪里可以找到这些数据?

小智 9

实际上,由于客户端可能正在通过代理,因此不同浏览器的超时显式值并不像您想象的那么多.

相反,我会问你为什么要问 - 你将不得不处理超时,并且每次都不会阻止它流入浏览器.因此,当连接断开时,最好简单地从客户端重新查询服务器 - 这就是为什么很多人建议长轮询的原因之一,这就是你似乎想要做的事情.无论您选择流式传输解决方案还是长轮询,您都必须允许连接重置.

对于一个简单的隐藏iframe客户端设置,它并不难做到 - 而且对于XHR请求也同样容易,具体取决于您正在使用的客户端框架.

大多数现代浏览器的超时在IE中看起来相当大(60分钟?哇),FF更短(约:配置说300秒 - eek) - 但正如我所说,这对你的代理不起作用,超时可能短至2分钟或更短,具体取决于代理管理员如何配置它.

因此,总结 - 超时发生.你不能阻止他们.对客户端进行编码,以便在发生时重新连接(限制以防止服务器停机),并且不要再担心它.除了更强大之外,它还可能使您的代码更高效,因为您不会定期向每个客户端抽取无用的数据.