2011-12-21 26 views
2

Facebook如何處理他們的「實時」數據?如果您正在查看自己的活動供稿,並且用戶喜歡某些內容,則可以立即看到文字變化,表明該用戶喜歡該內容,或者當您收到通知時,您會在頁面上看到一個紅色通知標誌,而不會刷新。實時顯示在線的其他用戶?

我知道,這個代碼可以把數據無需刷新:

$.post('ajax/test.html', function(data) { 
    $('.result').html(data); 
}); 

但有人可以解釋如何把實時數據,以便其他用戶將能夠看到更新,同時在其頁面無需刷新。

感謝

+1

「我無法自己測試,因爲我只能從本地主機服務器上的單臺計算機進行編碼。」你可以隨時打開它在兩個不同的瀏覽器... – ceejayoz 2011-12-21 03:30:12

+0

哈哈好吧,照顧,我想這是行不通的。還有什麼呢? – hellomello 2011-12-21 03:31:39

回答

6

這可使用多種技術,其中有許多名字來實現。

基本思路是這樣的:

  • 愛麗絲打開的Facebook。她的瀏覽器發出更新請求(例如,$.get),但如果沒有新更新並且請求保持「等待」狀態,則服務器不會響應。

  • Bob打開Facebook。他決定對愛麗絲的牆壁發表評論。他的瀏覽器將他的評論發佈到服務器($.post)。

    • 服務器接受這個職位,處理得當(保存到愛麗絲的牆壁等)
    • 而且服務器檢查是否有來自Alice等待更新請求。如果存在,服務器將有關此更新的信息呈現到響應流中並關閉連接。
  • Alice的瀏覽器終於​​得到這個長期掛請求的響應,並愉快地畫一個紅色的通知中的「1」的區域。它也立即打開另一個更新請求(不要錯過任何)。

  • Alice看到Bob發表的評論,並立即發送。

描述被稱爲「長輪詢」,它最早是由谷歌在Gmail中推出該技術。

+0

謝謝!你引導我走向正確的方向 – hellomello 2011-12-21 03:51:18

0
  1. 創建翻出所有的相關的更新,並將其輸出的JSON的PHP腳本。
  2. 設置javascript以在一段時間間隔內請求該PHP腳本並更新相應的元素。長輪詢,服務器發送活動,彗星,WebSockets的,和其他人:
2

這個問題有幾種解決方案,你將不得不做一些研究來決定你想要實現的。其中一些解決方案被統稱爲Comet(http://en.wikipedia.org/wiki/Comet_%28programming%29

Facebook使用的方法是Ajax長輪詢。在這種方法中,服務器會進行ajax調用,並且服務器等待響應,從而導致連接掛起,直到它達到更新或達到最長時間。如果在該時間間隔內接收到新數據,說一個聊天消息,它會立即響應數據。在每次調用結束時,客戶端會啓動一個新的ajax調用並等待。如果您在Facebook上觀看您的瀏覽器控制檯,您可以看到這些電話。

下一個方法稱爲永遠幀,其中使用隱藏的iFrame並連續發送分塊日期,並且永不完成加載。該數據在收到主框架時讀取。

另一種剛剛可用的解決方案是WebSockets。 WebSockets是一個真正的雙向瀏覽器持久連接,功能非常強大。然而,它處於早期階段,直到最近的一次修訂被一些瀏覽器阻止了安全問題。

相關問題