Want to improve this post? Add citations from reputable sources by editing the post。带有未来源内容的帖子可以被编辑或删除。







As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center获取指导。




已关闭8年。





我试图了解Facebook的聊天功能如何在不持续轮询服务器的情况下接收消息。

Firebug向我展示了一个GET XmlHttpRequest,它一直坐在那里,等待服务器的响应。 5分钟后,此操作永不超时。

他们如何防止超时?

AJAX请求可以无限期地呆在那里,等待响应吗?

我可以使用JSONRequest吗?我在json.org上看到了这一点:


JSONRequest旨在支持
双工连接。这允许
服务器可以在其中应用程序
异步启动传输。
这是通过同时使用两个来完成的
请求:一个发送,另一个发送给
接收。通过使用超时
参数,可以保留POST请求
等待,直到服务器确定
它有及时的数据要发送。


或者,除了使用JSONRequest之外,还有另一种方法让AJAX呼叫就在那儿等待吗?

最佳答案

Facebook使用一种现在称为Comet的技术将消息从服​​务器推送到客户端,而不是让客户端轮询服务器。

有许多方法可以实现,而XMLHttpRequest long polling只是一个选择。该方法背后的原理是,客户端发送一个普通的XMLHttpRequest,但是服务器直到某个事件发生(例如另一个用户发送一条消息)时才响应,因此客户端被迫等待。当客户端收到响应(或请求超时)时,客户端仅创建一个新请求,以使该服务器始终有一个打开的请求。

07-28 07:47