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