讓我們與HTTP解決方案比一比,看看在全雙工實時瀏覽器通信中,HTML5 WebSockets是 如何減少不必要的網(wǎng)絡流量并降低網(wǎng)絡延遲的。實時和HTTP。正常情況下,瀏覽器訪問web頁面時,一般會向頁面所在的Web服務器發(fā)送一個HTTP請 求。Web服務器識別請求,然后返回響應。大多數(shù)情況下,如股票價格、新聞報道、余票查詢、 交通狀況、醫(yī)療設備讀取數(shù)據(jù)等,當內(nèi)容呈現(xiàn)在瀏覽器頁面上時,可能已經(jīng)沒有時效性。如果用戶想要獲得最新的實時信息,就需要不斷地手動刷新頁面,這顯然不是一個明智的做法。
目前實時Web應用的實現(xiàn)方式,大部分是圍繞輪詢和其他服務器端推送技術展開的,其中最著名的是Comet。Comet技術可以讓服務器端主動以異步方式向客戶端推送數(shù)據(jù),它會使針對傳輸消息到客戶端的響應延遲完成。
使用輪詢時,瀏覽器會定期發(fā)送HTTP請求,并隨即接收響應,這項技術是瀏覽器在實時信 息傳送方面的首次嘗試-顯然,如果知道消息傳遞的準確時間間隔,輪詢將是一個很好的辦法, 因為可以將客戶端的請求同步為只有服務器上的信息可用時才發(fā)出。但是,實時數(shù)據(jù)往往不可預測, 不可避免會產(chǎn)生一些不必要的請求,在低消息率情況下會有很多無用的連接不斷地打開和關閉。
使用長輪詢時,瀏覽器向服務器發(fā)送一個請求,服務器會在一段時間內(nèi)將其保持在打開狀態(tài)。如果服務器在此期間收到一個通知,就會向客戶端發(fā)送一個包含消息的響應。如果時間已到卻還 沒收到通知,服務器會發(fā)送一個響應消息來終止打開的請求。然而,最關鍵的是,當信息量很大時,與傳統(tǒng)輪詢方式相比,長輪詢方式并無實質(zhì)上的性能改善。