Socket與WebSocket

我們開發(fā)的網(wǎng)絡(luò)應(yīng)用程序位于應(yīng)用層,TCP和UDP屬于傳輸層協(xié)議,在應(yīng)用層如何使用傳輸層的服務(wù)呢?在應(yīng)用層和傳輸層之間,則是使用套接字來進(jìn)行分離。
Socket位于TCP/IP之上,通過Socket可以方便的進(jìn)行通信連接。對(duì)外屏蔽了復(fù)雜的TCP/IP。

1.1 套接字Socket : 完成兩個(gè)應(yīng)用程序之間的數(shù)據(jù)傳輸
套接字Socket.png

建立 網(wǎng)絡(luò)通信 連接至少要一對(duì)端口號(hào)(socket)。socket本質(zhì)是 編程接口(API),對(duì)TCP/IP的封裝,TCP/IP也要 提供 可供程序員做網(wǎng)絡(luò)開發(fā)所用的接口,這就是Socket編程接口;HTTP是轎車,提供了封裝或者顯示數(shù)據(jù)的具體形式( text/html... );Socket是發(fā)動(dòng)機(jī),提供了 網(wǎng)絡(luò)通信 的能力。

socket層位置.png
1.2 WebSocket與Socket的關(guān)系

Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層,它是一組接口( 不是協(xié)議,為了方便使用TCP或UDP而抽象出來的一層,是位于應(yīng)用層和傳輸控制層之間的一組接口 )。
在設(shè)計(jì)模式中,Socket其實(shí)就是一個(gè)門面模式,它把復(fù)雜的TCP/IP協(xié)議族隱藏在Socket接口后面。利用TCP/IP協(xié)議建立TCP連接。(TCP連接則更依靠于底層的IP協(xié)議,IP協(xié)議的連接則依賴于鏈路層等更低層次。)
WebSocket則是一個(gè)典型的應(yīng)用層協(xié)議??梢园裌ebSocket想象成HTTP,HTTP和Socket什么關(guān)系,WebSocket和Socket就是什么關(guān)系。

1.3 HTTP和WebSocket

HTTP以往的雙向通信解決方案會(huì)造成資源浪費(fèi),
HTTP的基本模型是一個(gè)Request對(duì)應(yīng)一個(gè)Response。
HTTP的長(zhǎng)連接,本質(zhì)上還是Request/Response消息對(duì),并不是真的TCP長(zhǎng)連接,而WebSocket 則實(shí)現(xiàn)真的TCP長(zhǎng)連接

HTTP的長(zhǎng)連接模型.png

WebSocket的目的是取代HTTP在雙向通信場(chǎng)景下的使用,而且它的實(shí)現(xiàn)方式有些也是基于HTTP的(WS的默認(rèn)端口是80和443)?,F(xiàn)有的網(wǎng)絡(luò)環(huán)境(客戶端、服務(wù)器、網(wǎng)絡(luò)中間人、代理等)對(duì)HTTP都有很好的支持,所以這樣做可以充分利用現(xiàn)有的HTTP的基礎(chǔ)設(shè)施,有點(diǎn)向下兼容的意味。
簡(jiǎn)單來講,WS協(xié)議有兩部分組成:握手和數(shù)據(jù)傳輸。

傳統(tǒng) HTTP 請(qǐng)求響應(yīng)客戶端服務(wù)器交互圖
WebSocket 請(qǐng)求響應(yīng)客戶端服務(wù)器交互圖

參考:什么是Socket?簡(jiǎn)單點(diǎn),通俗易懂的?
參考:WebSocket與socket的區(qū)別
參考:刨根問底HTTP和WebSocket協(xié)議(二)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容