2011-04-06 116 views
0

我正在編寫視頻cms,並希望所有用戶在進入時立即顯示新資產。 如果我是正確的,那麼facebook會實時更新其牆上頁面。所以當我發佈一些東西給朋友時,它立即顯示在他的牆上。正如他們所說,實時網絡。 我想知道你是怎麼做到的?不是客戶端 - 服務器通信的技術,而是服務器上發生的事情。 我瞭解觀察者模式的原理。 但牆壁實際上是一個消息表上的查詢。 觀察者如何知道用戶感興趣的查詢? 它是否包含所有連接用戶的所有查詢,並在新內容出現時重新執行它。 我相信Google即時可以這樣工作。 謝謝你幫助我。C#觀察者模式消息過濾

回答

1

當您打開Facebook時,請在瀏覽器中打開腳本時間表以查看頁面上正在執行的腳本。您會注意到每秒執行一次輪詢腳本。因此,頁面每秒鐘查看緩存幾次,以查看是否有任何可以顯示的新信息。

http://www.ajaxwith.com/Poll-vs-Push-Technology.html - 這應該給你一個關於這個問題的背景。

+0

謝謝你的迴應。您的建議稱爲輪詢,並導致許多不必要的服務器和網絡過載。我在想服務器推送技術。但是現在我不知道在客戶端過濾數據時使用什麼樣的模式。 – Erik 2011-04-06 21:27:07

1

Facebook使用AJAX和JavaScript計時器在後臺輪詢查找任何已更改的內容。其他網站使用相同類型的功能來更新嵌入在頁面中的股票報價等。它不是真正立即更新,它的更新頻率與JavaScript計時器到達其服務器的頻率相同。這是因爲網絡瀏覽器使用HTTP,這是一個請求/響應協議。瀏覽器不會顯示任何不是對瀏覽器發起的請求的直接回應;沒有辦法只從您的網絡服務器直接發送內容到瀏覽器。

+0

是的!你可以使用websockets。好的,並非所有的瀏覽器都支持這一點,但我的客戶確實;-) – Erik 2011-04-06 21:29:50

+0

好吧,想象我的客戶端都有一個運行連接的c#應用程序,讓我們說一個服務器的wcf服務。我想讓它們保持最新狀態。這可以通過觀察者模式完成,因爲他們知道他們沒有打開簡單的列表,但是搜索結果等。 – Erik 2011-04-06 21:33:10

+0

你仍然需要進行民意調查。 WCF服務不會推送數據,它會在發出請求時返回數據。從技術上講,你可以保持一個回調通道打開,並有很長的超時時間(我認爲最大值約爲24天),併發送數據,但根據我的經驗,這並不是特別可靠。如果服務器到達客戶端時遇到問題,它將關閉通道,但您的客戶端應用程序不知道,也不會嘗試重新初始化連接。 – 2011-04-06 21:45:53