一:WebSocket與HTTP的關係
- 1. 都是一樣基於TCP的,都是可靠性傳輸協議。
- 2. 都是應用層協議。
- 1. WebSocket是雙向通信協議,模擬Socket協議,可以雙向發送或接受信息。HTTP是單向的。
- 2. WebSocket是需要握手進行建立連接的。
- 3. HTTP的url使用"http//"或"https//"開頭;Websocket的url使用"ws//"開頭
WebSocket在建立握手時,數據是通過HTTP傳輸的。但是建立之後,在真正傳輸時候是不需要HTTP協議的。
二:WebSocket與Socket的關係
- Socket其實並不是一個協議,而是爲了方便使用TCP或UDP而抽象出來的一層,是位於應用層和傳輸控制層之間的一組接口。
- 當兩臺主機通信時,必須通過Socket連接,Socket則利用TCP/IP協議建立TCP連接。TCP連接則更依靠於底層的IP協議,IP協議的連接則依賴於鏈路層等更低層次。socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個調用接口(API),通過Socket,我們才能使用TCP/IP協議。
- HTTP和Socket什麼關係,WebSocket和Socket就是什麼關係。
區別
1.WebSocket:
- WebSocket則是一個典型的應用層協議。
- websocket通訊的建立階段是依賴於http協議的。最初的握手階段是http協議,握手完成後就切換到websocket協議,並完全與http協議脫離了。
- 建立通訊時,也是由客戶端主動發起連接請求,服務端被動監聽。
- 通訊一旦建立連接後,通訊就是“全雙工”模式了。也就是說服務端和客戶端都能在任何時間自由得發送數據,非常適合服務端要主動推送實時數據的業務場景。
- 交互模式不再是“請求-應答”模式,完全由開發者自行設計通訊協議。
- 通信的數據是基於“幀(frame)”的,可以傳輸文本數據,也可以直接傳輸二進制數據,效率高。當然,開發者也就要考慮封包、拆包、編號等技術細節。
2.Socket:
- Socket是傳輸控制層的一組接口
- 服務端監聽通訊,被動提供服務;客戶端主動向服務端發起連接請求,建立起通訊。
- 每一次交互都是:客戶端主動發起請求(request),服務端被動應答(response)。
- 服務端不能主動向客戶端推送數據。
- 通信的數據是基於文本格式的。二進制數據(比如圖片等)要利用base64等手段轉換爲文本後才能傳輸。
三:WebSocket、HTTP 與 TCP
從上面可以看出,HTTP、WebSocket 等應用層協議,都是基於 TCP 協議來傳輸數據的。我們可以把這些高級協議理解成對 TCP 的封裝。
TPC/IP協議是傳輸層協議,主要解決數據 如何在網絡中傳輸,而HTTP是應用層協議,主要解決如何包裝數據。