10 分鐘 理論 + 實(shí)操 搞懂 WebSocket

WebSocket之前的解決方法:用的輪詢長輪詢,缺點(diǎn)會產(chǎn)生大量的請求和響應(yīng),造成不必要的網(wǎng)絡(luò)開銷和延遲
webSocket應(yīng)用場景:低延遲實(shí)時(shí)連接的應(yīng)用
webSocket優(yōu)點(diǎn):雙向?qū)崟r(shí)通信,降低延遲,可以減少請求和響應(yīng)的開銷,因?yàn)樗倪B接只需要建立一次
它允許服務(wù)器和客戶端之間通過單個(gè)TCP連接進(jìn)行雙工通信并且進(jìn)行實(shí)時(shí)的數(shù)據(jù)交換
建立連接過程:HTTP發(fā)送一次常規(guī)get請求在請求頭中帶上Upgrade告訴服務(wù)器要從HTTP升級成websocket連接建立成功,客戶端和服務(wù)端可以隨時(shí)進(jìn)行數(shù)據(jù)交互。
webSocket心跳機(jī)制:
為什么使用心跳機(jī)制:為了保持WebSoket穩(wěn)定的長連接,在建立連接之后,服務(wù)端和客戶端之間通過心跳包來保持連接狀態(tài),以防止連接因?yàn)殚L時(shí)間沒有數(shù)據(jù)傳輸而被切斷
什么是心跳包:心跳包是一種特殊的數(shù)據(jù)包,它不包含任何實(shí)際數(shù)據(jù),只是用來維持連接狀態(tài)的
怎么使用:通常情況下心跳包由客戶端和服務(wù)端定期發(fā)送一個(gè)空的數(shù)據(jù)幀,以確保雙方的鏈接仍然有效,避免鏈接因?yàn)殚L時(shí)間沒有數(shù)據(jù)傳輸而被中斷,如果長時(shí)間沒有收到對方的心跳包就可以認(rèn)為連接已經(jīng)斷開需要重新建立連接。
webSoket限制:不提供加密功能,不安全,可以用SSL協(xié)議對來webSoket進(jìn)行加密,確保數(shù)據(jù)安全,也可以在服務(wù)端限制權(quán)限設(shè)置白名單或者黑名單只允許特定地址或者域名的客戶端進(jìn)行鏈接。
瀏覽器的限制:不支持IE10以前的版本
消耗服務(wù)器資源