我想爲我的網站創建一個實時訂單頁面。我需要頁面進行自動更新以顯示新訂單已放置,並且每當新訂單行位於數據庫中時顯示警報/聲音。Ajax警報,當一行已被添加到MySQL數據庫
關於如何輕鬆實現此目的的任何想法?
感謝, -AJay
我想爲我的網站創建一個實時訂單頁面。我需要頁面進行自動更新以顯示新訂單已放置,並且每當新訂單行位於數據庫中時顯示警報/聲音。Ajax警報,當一行已被添加到MySQL數據庫
關於如何輕鬆實現此目的的任何想法?
感謝, -AJay
您將需要使用像Comet能夠將數據推到客戶端。
然後,使用MySQL trigger以某種方式在服務器應用程序中引發一個將Comet連接保持打開的事件,以推送適當的數據。
許多開發人員使用的不太優雅的方式(至少在WebSockets變得流行之前)是poll with AJAX for changes,但是這具有較高的帶寬開銷和較長的延遲。
從AJAX視圖,你應該在這樣的JavaScript使用定時器......
// First parameter is an expression and second is a interval as miliseconds.
setTimeout ("UpdateFunction()", 2000);
此外,我建議您使用此代碼...
setTimeout ("UpdateFunction()", 5000);
function UpdateFunction()
{
// (do something here)
setTimeout ("UpdateFunction()", 5000);
}
您UpdateFunction()
應該調用PHP或更新訂單列表的asp頁面。
如果您不希望每5秒鐘發現一次新內容,則此解決方案會導致大量浪費的帶寬。另外,如果您期望內容比每5秒更頻繁一次,那麼接收內容速度會更快。如果不能使用推送方法,自適應輪詢時間可能會更好。 – 2010-06-29 17:45:33
您應該引用不帶引號和參數的UpdateFunction以避免eval。這也將工作... setTimeout(function(){alert('hi');},5000); – mveerman 2010-06-29 17:54:46
Gmail使用這種技術來保持郵件和嗡嗡聲的更新列表!我閱讀了Gmail的頁面源代碼,並使用了setTimeOut 5次!在某些情況下,間隔爲100或250毫秒! – Jalal 2010-06-30 06:49:38
我認爲一個輪詢方法會對你有好處,因爲服務器推送對瀏覽器有很多負面影響。
如果使用輪詢路由,我會建議在您的頁面上發生一個定時事件,它將調用Web方法。然後,Web方法將返回有關排隊訂單的數據(像ID一樣小)。將ID列表與頁面上當前充實的內容進行比較,並假設您在新列出的列表中存在不存在的內容(反之亦然),請調用單獨的方法來檢索其他詳細信息以顯示新的訂單或刪除舊的條目。
這樣,您不需要保持服務器的穩定流(這可以阻止用戶的瀏覽器發出額外的內容請求)。
我希望有所幫助。
什麼是「對瀏覽器的許多負面影響」? – 2010-06-29 17:48:15
@Ben:從您的維基百科鏈接中獲取:「特別是,HTTP 1.1規範指出,瀏覽器與Web服務器的同時連接數不應超過2個。但是,爲實時事件持有一個連接會產生負面影響在瀏覽器上的可用性,瀏覽器可能會阻止它在加載時發送新請求,例如一系列圖像。「 – Lance 2010-06-29 17:50:41
這就是爲什麼你只在頁面加載後纔打開Comet連接的原因,另外請注意,當離開頁面時,連接也會被重置,連接不應該阻塞加載,IE8 +,Firefox,Chrome和Safari都允許對於默認情況下最多6個連接或更多的連接,對於HTTP 1.1服務器,只有IE6/7默認爲最多2個連接。爲了進一步緩解這種情況,請在不同的子域上使用Comet連接(即:comet.example.com) – 2010-06-29 17:56:38
+1只是說不投票! – 2010-06-29 17:37:51
如果每個人都停止輪詢,我很樂意這樣做,但事實是獲得長時間的HTTP連接無縫工作可能很困難。 – 2010-06-29 17:39:51