不同浏览器的超时行为?

时间:2009-07-28 07:23:00

标签: ajax browser timeout comet

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

请求

----------------- wait ------------------------->发送转储数据

----------------- wait ------------------------->发送转储数据

----------------- wait ------------------------->发送转储数据

----------------- wait ------------------------->发送转储数据

----------------- wait ------------------------->发送转储数据

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

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

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

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

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

1 个答案:

答案 0 :(得分:9)

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

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

对于简单的隐藏iframe客户端设置it's not too hard to do - 对于XHR请求同样容易,具体取决于您使用的客户端框架。

大多数现代浏览器的超时在IE中似乎是rather large(60分钟?哇),在FF中更短(约:配置说300秒 - eek) - 但正如我所说,那不是帮助您对付代理,其中超时可能短至2分钟或更短,具体取决于代理管理员如何配置它。

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

相关问题