2011-07-12 67 views
11

我很好奇Facebook如何將數據推送到瀏覽器,就像在新聞提要中一樣。新的數據顯示在Feed的頂部,無需重新加載頁面或點擊按鈕
Facebook是否通過按設定的時間間隔通過AJAX輪詢服務器來實現此目的,或者他們以某種方式將新數據從服務器推送到客戶端嗎?
如果是這樣,他們使用哪種語言或API?Facebook如何將數據推送到新聞Feed?

+2

如果你有螢火蟲看看控制檯。你會看到它的一個GET請求,可能通過AJAX請求,只是無限期地旋轉。他們真正的問題是他們如何保持這個請求的開放,因爲它似乎沒有設置超時或間隔。 – grep

回答

3

它實際上被稱爲'長輪詢',或'comet'。執行server push有多種方法,但最常見的方式是在接收數據時保持連接打開(由於瀏覽器對主機的打開連接數量有限制,因此存在缺陷)。 Facebook已經開源了Tornado web servers,它可以處理很多開放的連接(這可能是一個問題,你有很多用戶,但你使用的是Apache)。在收到AJAX響應的那一刻,您只需執行一個新請求,等待下一個響應。

2

他們用AJAX推它,他們使用(至少他們使用),無限滾動。

所以,你會加載頁面,他們會作出初步調用服務器加載基於誰登錄在一些消息,說有像jQuery框架:

http://api.jquery.com/jQuery.ajax/

然後,當您向下滾動時,他們會記下您何時接近頁面底部,並且需要加載更多,以便不會丟失數據,然後他們會自動進行另一個調用。這就是所謂的無限滾動,並跟蹤你在DOM其中:

僅舉一例:http://ajaxian.com/archives/implementing-infinite-scrolling-with-jquery

3

本質上的代碼做一個AJAX調用自己的服務器,或者等待觸發另一個響應請求,輪詢計時器,或者他們打開一個websocket接收數據,只要它被推送。這當然是爲了在提要頂部顯示「新」數據。當頁面到達底部時,他們只是做另一個AJAX調用來獲取下n個項目。

相關問題