[點(diǎn)晴永久免費(fèi)OA]Web提醒服務(wù)的四種實(shí)現(xiàn)方式比較
很多的大型Web系統(tǒng)中都有一個(gè)可以提醒用戶的功能。 提醒的消息自然是越新鮮越實(shí)時(shí)越好。 對(duì)此,不同的系統(tǒng)采用不同的策略。 刷新。當(dāng)刷新頁(yè)面的時(shí)候查詢新的消息。 當(dāng)用戶長(zhǎng)期停留在一個(gè)頁(yè)面的情況(以SPA為極端情況)下,這種刷新的操作就會(huì)使得消息的新鮮度受損。但總體來(lái)說(shuō),方便實(shí)現(xiàn),且開(kāi)銷(xiāo)不大。用戶在一個(gè)頁(yè)面上停留的時(shí)間越短,這種策略就越好。 短輪詢。定期發(fā)送一個(gè)Ajax請(qǐng)求到服務(wù)器檢查新的消息。 設(shè)置一個(gè)周期(如1秒)向服務(wù)器發(fā)送一個(gè)異步請(qǐng)求檢查是否存在新的消息。周期越短,開(kāi)銷(xiāo)越大;周期越長(zhǎng),新鮮度越低。要視具體情況權(quán)衡周期,通常周期的設(shè)置可以有 1秒、10秒、1分鐘等,周期不會(huì)過(guò)長(zhǎng)。 長(zhǎng)輪詢。與服務(wù)器建立長(zhǎng)連接,用chunk流不斷發(fā)送信息。 在一開(kāi)始傳數(shù)據(jù)(通常是指HTML)的時(shí)候,服務(wù)器設(shè)置類型為chunk,不告訴客戶端這個(gè)數(shù)據(jù)具體有多少,因此客戶端與服務(wù)器會(huì)保持持久的連接,會(huì)接受服務(wù)器持續(xù)發(fā)送的數(shù)據(jù)。這種情況可以想象看網(wǎng)絡(luò)視頻的時(shí)候,一個(gè)緩沖流的狀態(tài)。優(yōu)點(diǎn)是沒(méi)有多余浪費(fèi)的網(wǎng)絡(luò)I/O資源(相比于短輪詢),擁有真正的實(shí)時(shí)性。缺點(diǎn)是這個(gè)流不容易操控,操作起來(lái)不自然;客戶端只能被動(dòng)接受服務(wù)器的數(shù)據(jù),如果要與服務(wù)器對(duì)話又要借助Ajax。 套接字。與服務(wù)器建立套接字,實(shí)時(shí)全雙工的TCP協(xié)議的應(yīng)用。 自H5技術(shù)中WebSocket的出現(xiàn),徹底取代輪詢的方案就已經(jīng)出現(xiàn)。首先套接字也是建立一個(gè)長(zhǎng)連接,但它的通訊協(xié)議就是ws,與http不是同一個(gè)協(xié)議,但它們都基于TCP。WebSocket可以用JavaScript直接操作,實(shí)時(shí)可讀可寫(xiě),相當(dāng)于與服務(wù)器建立了一個(gè)新的實(shí)時(shí)對(duì)話通道。節(jié)約了短輪詢的I/O浪費(fèi),又使得長(zhǎng)輪詢的編程復(fù)雜度下降??傮w完爆輪詢,是現(xiàn)代提醒服務(wù),以及其他實(shí)時(shí)應(yīng)用的不二之選。
該文章在 2019/9/12 0:03:31 編輯過(guò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |