前言
Socket.IO 是一個用來實現(xiàn)實時雙向通信的框架,其本質(zhì)是基于 WebSocket 技術(shù)。
我們首先來聊聊 WebSocket 技術(shù),先設(shè)想這么一個場景:
· 用戶小A,打開了某個網(wǎng)站的充值界面,該界面上有一個付款的二維碼。
· 當(dāng)小A 用某寶的 APP 掃碼付款之后,網(wǎng)頁要自動跳轉(zhuǎn)到付款成功的界面。最簡單的方法就是網(wǎng)頁每隔一段時間就請求一次服務(wù)器——“怎么樣?那貨付款沒有?”,“怎么樣?還沒付嗎?”,“怎么樣?這次總該付了吧”。
· 當(dāng)接收到服務(wù)端返回確認(rèn)付款的標(biāo)識后,頁面再進(jìn)行跳轉(zhuǎn)。
這種定時對服務(wù)端發(fā)送 HTTP 請求的技術(shù)也被稱為“輪詢”。輪詢的缺點也顯而易見,短時間內(nèi)的多次訪問無疑會對服務(wù)器造成很大壓力。
后來,人們發(fā)明了長輪詢技術(shù)。這與短輪詢的區(qū)別在于,每次瀏覽器請求服務(wù)器后,服務(wù)器并不會立即返回“用戶還未付款”的結(jié)果,而是一直將 HTTP 保持在掛起狀態(tài),只有當(dāng)用戶付款后才會返回給瀏覽器 “用戶已經(jīng)付款” 的結(jié)果。當(dāng)然,如果用戶在規(guī)定時間內(nèi)仍未付款還是會斷開此次連接,