2011-12-08 68 views
1

我處於開發某些功能的概念化階段,但不太確定某個功能。將新元組添加到數據庫時自動刷新內容

我在窗體中有一個DIV,我們稱之爲id ='divComments'。該div包含特定標題的所有評論。它從數據庫中檢索所有容易做到的數據。

現在,當頁面刷新時,該div將填充所有註釋。如果其他用戶添加評論,則所有其他用戶在登錄時(在該時間點之後)將看到此評論,或者他們刷新頁面。

如果我想要這個div從數據庫提供並在數據庫中的關係/表中插入某些內容時自動刷新,該怎麼辦?所以我打開了我的頁面(我不刷新它,只是盯着它)顯示可以讓x和其他人在特定的數據庫表中添加一個元組讓我們調用y,我的div現在顯示x和y。換句話說,它從數據庫更新實時而不刷新。

任何人都有任何想法如何去做這樣的事情?

+0

您的下游HTML無法「偵聽」數據庫級別的更改。但是,您可以實施Ajax解決方案來定期刷新數據庫中的記錄。 – rdlowrey

+0

好的。那麼我必須問一個聊天室如何像大都會那樣實施聊天室? –

+0

HTML本身一旦發送給客戶端就不能做任何事情。之後的任何更改都會涉及到AJAX打電話給家裏以獲取最新數據......每秒可能會有一個js呼叫(甚至更頻繁)。我不能說「大都會」如何具體實施這樣的解決方案。 – rdlowrey

回答

2

HTTP是無狀態的。資產通過HTTP連接完成下載後,連接將被銷燬,服務器不再瞭解客戶端正在做什麼。

有些方法可以使用cookie和會話等方式來僞造有狀態行爲,但這些方法仍需要與服務器建立新連接才能獲取新數據。

有些技術正在開發中,可以讓Web服務器在客戶端變得可用時立即「推送」新的數據(websockets,服務器發送的事件等),但這些技術仍處於草稿階段大多數部分和瀏覽器的支持最多也是參差不齊的。

您唯一真正的選擇是使用刷新元標記(EXTREMELY inefficient!)輪詢服務器,使用AJAX輪詢服務器(更好,因爲您可以將其設計爲只抓取已更改的數據,但仍不能理想的),或者使用持久的AJAX連接,這個連接保持空閒狀態,直到新數據變爲可用,此時數據被下載,連接關閉,並且打開一個新連接以閒置以獲取更多數據(將允許立即響應,但難以正確設置)。

+0

「或使用持久空閒的AJAX連接,直到新數據可用,在哪一點數據被下載,連接被關閉,並且打開一個新的連接以閒置以獲取更多數據(將允許立即響應,但難以正確設置)。「 ---------->你能給我一些關於這方面研究的關鍵詞嗎?我想它正是我要找的。 –

+0

它被稱爲長時間輪詢的AJAX。它有時也被稱爲彗星,儘管它實際上只是可用於實施彗星的幾種技術之一。 http://en.wikipedia.org/wiki/Comet_%28programming%29#Ajax_with_long_polling – GordonM

+0

對彗星做了一些快速研究,但有一些問題。從我看到它的核心是與服務器頁面的無限循環,以檢查文件修改日期是否已更改。當然,還有其他的東西,但從我看到它是更新的核心。無限循環有一個可能100毫秒的小斷點,以避免堵塞CPU。 –