面試官:說說 WebSocket 和 Socket 及 Http 的區(qū)別?
閱讀本文大概需要 4.5 分鐘。
來自:juejin.cn/post/6942358900171603975
Socket是什么?
TPC/IP協(xié)議是傳輸層協(xié)議,主要解決數(shù)據(jù)如何在網(wǎng)絡中傳輸; Socket是對TCP/IP協(xié)議的封裝和應用(程序員層面上); 而HTTP是應用層協(xié)議,主要解決如何包裝數(shù)據(jù)。

WebSocket屬于WHATWG發(fā)布的Web Application的一部分(即HTML5)的產物。大約在08年的時候,WG的工程師在討論網(wǎng)絡環(huán)境中需要一種全雙工的連接形式,剛開始一直叫做「TCPConnection」,并討論了這種協(xié)議需要支持的功能,大致已經和我們今天看到的WebSocket差不多了。他們認為基于現(xiàn)有的HTTP之上的一些技術(如長輪詢、Comet)并滿足不了這種需求,有必要定義一個全新的協(xié)議。
WebSocket和Socket的區(qū)別?

為什么要使用Websocket?
persistent connection),在一個TCP連接上也可以傳輸多個Request/Response消息對,但是HTTP的基本模型還是一個Request對應一個Response。輪詢(polling),輪詢就會造成對網(wǎng)絡和通信雙方的資源的浪費,且非實時。 長輪詢,客戶端發(fā)送一個超時時間很長的Request,服務器hold住這個連接,在有新數(shù)據(jù)到達時返回Response,相比#1,占用的網(wǎng)絡帶寬少了,其他類似。 長連接,其實有些人對長連接的概念是模糊不清的,我這里講的其實是HTTP的長連接(1)。如果你使用Socket來建立TCP的長連接(2),那么,這個長連接(2)跟我們這里要討論的WebSocket是一樣的,實際上TCP長連接就是WebSocket的基礎,但是如果是HTTP的長連接,本質上還是Request/Response消息對,仍然會造成資源的浪費、實時性不強等問題。
Websocket協(xié)議內容
握手
Upgrade擴展:Upgrade是HTTP中用來進行協(xié)議升級的頭域,在擴展的協(xié)議內容中,客戶端發(fā)起的協(xié)議轉換的方式更多,同時服務器也可以選擇不接受客戶端的協(xié)議升級請求;服務端也可以發(fā)起協(xié)議升級。
??ws-URI?=?"ws:"?"http://"?host?[?":"?port?]?path?[?"?"?query?]
??wss-URI?=?"wss:"?"http://"?host?[?":"?port?]?path?[?"?"?query?]
??host?=?
??port?=?
??path?=?
??query?=?
數(shù)據(jù)傳輸
WebSocket和HTTP的對比
相同點
都是基于TCP的應用層協(xié)議。 都使用Request/Response模型進行連接的建立。 在連接的建立過程中對錯誤的處理方式相同,在這個階段WS可能返回和HTTP相同的返回碼。 都可以在網(wǎng)絡中傳輸數(shù)據(jù)。
不同點
WS使用HTTP來建立連接,但是定義了一系列新的header域,這些域在HTTP中并不會使用。 WS的連接不能通過中間人來轉發(fā),它必須是一個直接連接。 WS連接建立之后,通信雙方都可以在任何時刻向另一方發(fā)送數(shù)據(jù)。 WS連接建立之后,數(shù)據(jù)的傳輸使用幀來傳遞,不再需要Request消息。 WS的數(shù)據(jù)幀有序。
推薦閱讀:
內容包含Java基礎、JavaWeb、MySQL性能優(yōu)化、JVM、鎖、百萬并發(fā)、消息隊列、高性能緩存、反射、Spring全家桶原理、微服務、Zookeeper......等技術棧!
?戳閱讀原文領??!? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??朕已閱?
評論
圖片
表情

