我试图了解Facebook的聊天功能如何在不连续策略服务器的情况下接收消息.
Firebug向我展示了一个持续坐在那里的GET XmlHttpRequest,等待来自服务器的响应.5分钟后,这从未超时.
它们如何防止超时?
一个AJAX请求可以无限期地坐在那里等待响应?
我可以用JSONRequest做到这一点吗?我在json.org看到了这个:
JSONRequest旨在支持双工连接.这允许服务器可以异步启动传输的应用程序.这是通过使用两个同时请求来完成的:一个发送,另一个接收.通过使用timeout参数,POST请求可以保持挂起状态,直到服务器确定它有及时发送数据.
或者除了使用JSONRequest之外,还有其他方法让AJAX调用只是坐在那里等待吗?
Facebook使用一种现在称为Comet的技术将消息从服务器推送到客户端,而不是让客户端轮询服务器.
有许多方法可以实现,XMLHttpRequest长轮询只是一个选项.此方法背后的原理是客户端发送普通的XMLHttpRequest,但服务器在某些事件发生之前不响应(例如另一个用户发送消息),因此客户端被迫等待.当客户端收到响应时(或者请求超时),客户端只需创建一个新请求,以便它始终向服务器发出一个打开请求.