我正在写一个基于AJAX / COMET的在线聊天室。我的设计是:
请求
-----------------等待------------------------->发送转储数据
------发生了什么事,得到回应。
另一个要求.....
如您所见,服务器保留请求并等待发生了一些事情,如果发生了某些事件,则只需推送数据并完成请求即可。然后客户端将发出另一个请求。请求中存在滴答声,因此,如果两个请求之间发生了事件,则服务器会知道客户端有未决事件。
在浏览器超时之前,服务器还会发送一些空闲数据以防止客户端超时。
现在,问题来了:不同浏览器的超时行为是什么?我知道浏览器发送请求并等待数据,如果等待时间太长,则会超时。但是,不同浏览器的超时行为是什么?是否有任何头文件可以控制浏览器的超时行为?通过了解浏览器的超时行为,以便我可以决定如何处理它们。在哪里可以找到这些数据?
实际上,由于客户端可能正在处理代理,因此不同浏览器的超时值的显式值并不像您想的那样重要。
相反,我想问你为什么要问-您将不得不处理超时,并且每次浏览器的流传输都不会阻止它。因此,最好在连接断开时简单地从客户端重新查询服务器- 这是很多人建议您进行长轮询的原因之一。无论选择流式解决方案还是长时间轮询,都必须允许连接重置。
对于简单的隐藏iframe客户端设置,这并不难 -取决于您使用的客户端框架,XHR请求也同样容易。
大多数现代浏览器的超时在IE中似乎很大(60分钟?哇),而在FF中则更短(about:config表示300秒-eek),但是正如我所说,这对您使用代理服务器无济于事,超时时间可能短至2分钟或更短,具体取决于代理管理员的配置方式。
因此,总而言之- 发生超时。你不能阻止他们。对您的客户端进行编码,使其在发生时重新连接(有一定的限制,以防止服务器停机),而不必担心它。除了更健壮之外,它还可能使您的代码更具性能,因为您不会定期将无用的数据泵送到每个客户端。