前言
初次接觸 websocket 的人,可能都會(huì)有這樣的疑問:我們已經(jīng)有了 http 協(xié)議,為什么還需要websocket協(xié)議?它帶來了什么好處?
原因是http每次請(qǐng)求只能由客戶發(fā)起,而websocket最大特點(diǎn)就是,服務(wù)器可以主動(dòng)向客戶端推送信息,客戶端也可以主動(dòng)向服務(wù)器發(fā)送信息
剛好目前項(xiàng)目中用到了websocket,當(dāng)然關(guān)于websocket的知識(shí)無論是前端還是后臺(tái)開發(fā)的同學(xué)都得掌握,不會(huì)也沒關(guān)系,關(guān)注小許,這次給你講明白!
使用場(chǎng)景再現(xiàn)
在線教育:
老師進(jìn)行一對(duì)多的在線授課,在客戶端內(nèi)編寫的筆記、大綱等信息,需要實(shí)時(shí)推送至多個(gè)學(xué)生的客戶端,需要通過WebSocket協(xié)議來完成。
圖片
視頻彈幕:
終端用戶A在自己的手機(jī)端發(fā)送了一條彈幕信息,但是您也需要在客戶A的手機(jī)端上將其他N個(gè)客戶端發(fā)送的彈幕信息一并展示。需要通過WebSocket協(xié)議將其他客戶端發(fā)送的彈幕信息從服務(wù)端全部推送至客戶A的手機(jī)端,從而使客戶A可以同時(shí)看到自己發(fā)送的彈幕和其他用戶發(fā)送的彈幕。
當(dāng)然還有體育實(shí)況更新、視頻會(huì)議和聊天等等,這里都不一一列舉了
Web端即時(shí)通信方式
什么是web端即時(shí)通訊技術(shù)?
可以理解為實(shí)現(xiàn)這樣一種功能:服務(wù)器端可以即時(shí)地將數(shù)據(jù)的更新或變化反應(yīng)到客戶端,例如消息推送等功能都是通過這種技術(shù)實(shí)現(xiàn)的。
但是在Web中,由于瀏覽器的限制,實(shí)現(xiàn)即時(shí)通訊需要借助一些方法。這種限制出現(xiàn)的主要原因是,一般的Web通信都是瀏覽器先發(fā)送請(qǐng)求到服務(wù)器,服務(wù)器再進(jìn)行響應(yīng)完成數(shù)據(jù)的現(xiàn)實(shí)更新。
Web端實(shí)現(xiàn)即時(shí)通訊主要有四種方式:輪詢、長(zhǎng)輪詢(comet)、長(zhǎng)連接(SSE)、WebSocket。
它們大體可以分為兩類,一種是在HTTP基礎(chǔ)上實(shí)現(xiàn)的,包括短輪詢、長(zhǎng)輪詢(comet)、長(zhǎng)連接(SSE);另一種不是在HTTP基礎(chǔ)上實(shí)現(xiàn)是,即WebSocket。下面分別介紹一下這四種輪詢方式。
圖片
輪詢
基本思路就是客戶端每隔一段時(shí)間向服務(wù)器發(fā)送http請(qǐng)求,服務(wù)器端在收到請(qǐng)求后,不管是否有所需數(shù)據(jù)返回,都直接進(jìn)行響應(yīng)。
圖片
這種方式本質(zhì)上還是客戶端不斷發(fā)送請(qǐng)求,才形成客戶端能實(shí)時(shí)接收服務(wù)端數(shù)數(shù)據(jù)變化的假象。
實(shí)現(xiàn)比較簡(jiǎn)單,缺點(diǎn)是需要不斷建立http連接,浪費(fèi)資源,而且在客戶端數(shù)量級(jí)很大的情況下會(huì)導(dǎo)致服務(wù)器壓力陡增,顯然不是好選擇!
輪詢方式,你會(huì)發(fā)現(xiàn)在你打開F12調(diào)試頁面時(shí),你會(huì)發(fā)現(xiàn)大量的HTTP請(qǐng)求呢