一、WebSocket
Websocket是HTML5新增的一種全雙工通信協議,客戶端和服務端基於TCP握手連接成功后,兩者之間就可以建立持久性的連接,實現雙向數據傳輸。
傳統HTTP和Websocket的異同
不同點
- HTTP是單向數據流,客戶端向服務端發送請求,服務端響應並返回數據;Websocket連接后可以實現客戶端和服務端雙向數據傳遞。
- 由於是新的協議,HTTP的url使用"http//"或"https//"開頭;Websocket的url使用"ws//"開頭或"wss//"開頭。
相同點
- 都需要建立TCP連接
- 都是屬於七層協議中的應用層協議
傳統通過HTTP請求模擬雙向數據傳遞的方式是http+Polling(輪詢)和http+Long Polling(長輪詢)。
輪詢(Polling)就是客戶端定時發送get請求向服務端請求數據,這種方式能滿足一定的需求,但是存在一些問題,如果服務端沒有新數據,但是客戶端get請求到的數據都是舊數據,這樣不僅浪費了帶寬資源,而且占用CPU內存。
LongPolling(長輪詢)就是在Polling上的一些改進,即如果服務端沒有新數據返回給客戶端,服務端會把當前的這個get請求保持住(hold),當有新數據時則返回新數據,如果超過一定時間服務端仍沒有新數據,則服務端返回超時請求,客戶端接收到超時請求,然后在發送get請求,一直循環執行。
二、Socket.io
Socket.io不是Websocket,它只是將Websocket和輪詢 (Polling)機制以及其它的實時通信方式封裝成了通用的接口,並且在服務端實現了這些實時機制的相應代碼。
也就是說,Websocket僅僅是 Socket.io實現實時通信的一個子集。因此Websocket客戶端連接不上Socket.io服務端,當然Socket.io客戶端也連接不上Websocket服務端。
感謝
作者:vinterx鏈接:https://www.jianshu.com/p/970dcfd174dc
來源:簡書