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