2010-04-18 95 views
17

我想了解Facebook的聊天功能如何在不連續監測服務器的情況下接收消息。Facebook聊天如何避免連續輪詢服務器?

Firebug向我展示了一個連續坐在那裏的GET XmlHttpRequest,等待來自服務器的響應。 5分鐘後,這從未超時。

他們如何防止超時?

AJAX請求可以無限期地坐在那裏,等待響應?

我可以用JSONRequest嗎?我在json.org上看到:

JSONRequest旨在支持 雙工連接。這允許服務器可以通過 異步啓動傳輸。 這是通過使用兩個同步 請求完成的:一個發送和另一個到 接收。通過使用超時 參數,可以將POST請求留在 待處理直到服務器確定 它具有及時的數據發送。

或者還有另一種方法讓AJAX調用只是坐在那裏等待,除了使用JSONRequest?

回答

25

Facebook使用現在稱爲Comet的技術將消息從服​​務器推送到客戶端,而不是讓客戶端輪詢服務器。

有很多方法可以實現,XMLHttpRequest long polling只是一個選項。這種方法背後的原理是客戶端發送一個普通的XMLHttpRequest,但服務器在發生某些事件(例如另一個用戶發送消息)之前不作出響應,因此客戶端被迫等待。當客戶端收到響應時(或者請求超時),客戶端只需創建一個新請求,以便始終向服務器發出一個打開的請求。

+0

我只是想,如果我創建一個長的投票連接,我的Mac /電腦不會進入睡眠狀態。 Gmail聊天和Facebook上的操作如何?或者他們也不能睡覺? (困惑。) – loveNoHate 2014-12-13 22:31:03