5

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

要求

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

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

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

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

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

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

另一个请求…………

如您所见,服务器持有请求并等待发生某些事情,如果发生了某些事件,只需推送数据并完成请求。然后客户端将发出另一个请求。请求中有tick,所以如果两个请求之间有事件发生,服务器就知道客户端有挂起的事件。

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

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

4

1 回答 1

9

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

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

对于一个简单的隐藏 iframe 客户端设置,它并不太难- 对于 XHR 请求同样容易,具体取决于您使用的客户端框架。

大多数现代浏览器的超时在 IE 中似乎相当大(60 分钟?哇),而在 FF 中更短(about:config 表示 300 秒 - eek) - 但正如我所说,这无助于您对抗代理,超时可能短至 2 分钟或更短,具体取决于代理管理员的配置方式。

所以,总而言之 - 超时发生。你无法阻止他们。对您的客户端进行编码以在它们发生时重新连接(有一个限制以防止服务器停机),并且不要再担心它。除了更健壮之外,它还可能使您的代码更高效,因为您不会定期将无用的数据发送给每个客户端。

于 2009-08-03T18:41:23.543 回答