Http、Socket、WebSocket之间联系与区别
一、WebSocket和Socket區(qū)別
可以把WebSocket想象成HTTP(應(yīng)用層),HTTP和Socket什么關(guān)系,WebSocket和Socket就是什么關(guān)系。HTTP 協(xié)議有一個缺陷:通信只能由客戶端發(fā)起,做不到服務(wù)器主動向客戶端推送信息。WebSocket 協(xié)議它的最大特點就是:服務(wù)器可以主動向客戶端推送信息,客戶端也可以主動向服務(wù)器發(fā)送信息,是真正的雙向平等對話,屬于服務(wù)器推送技術(shù)的一種
二、socket和http的區(qū)別
TCP/IP協(xié)議棧主要分為四層:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層,
每層都有相應(yīng)的協(xié)議,如下圖
模型的基礎(chǔ)上進行了簡化,變成了四層,從下到上分別為:網(wǎng)絡(luò)接口層、網(wǎng)絡(luò)層、傳輸層、應(yīng)用層。與 OSI 體系結(jié)構(gòu)對比如下:
TCP:(傳輸控制協(xié)議,Transmission Control Protocol):(類似打電話)
面向連接、傳輸可靠(保證數(shù)據(jù)正確性)、有序(保證數(shù)據(jù)順序)、傳輸大量數(shù)據(jù)(流模式)、速度慢、對系統(tǒng)資源的要求多,程序結(jié)構(gòu)較復(fù)雜,每一條TCP連接只能是點到點的,TCP首部開銷20字節(jié)。
UDP:(用戶數(shù)據(jù)報協(xié)議,User Data Protocol):(類似發(fā)短信)
面向非連接 、傳輸不可靠(可能丟包)、無序、傳輸少量數(shù)據(jù)(數(shù)據(jù)報模式)、速度快,對系統(tǒng)資源的要求少,程序結(jié)構(gòu)較簡單 ,UDP支持一對一,一對多,多對一和多對多的交互通信,
UDP的首部開銷小,只有8個字節(jié)。
三、Websocket
注:什么是單工、半雙工、全工通信?
wensocket協(xié)議包含兩部分:一部分是“握手”,一部分是“數(shù)據(jù)傳輸”。
要弄明白 http 和 socket 首先要熟悉網(wǎng)絡(luò)七層:物 數(shù) 網(wǎng) 傳 會 表 應(yīng),如圖:
傳輸數(shù)據(jù)的時候只使用 TCP/IP 協(xié)議(傳輸層),如果沒有應(yīng)用層來識別數(shù)據(jù)內(nèi)容,傳輸后的協(xié)議都是無用的。應(yīng)用層協(xié)議很多 FTP,HTTP,TELNET等,可以自己定義應(yīng)用層協(xié)議。
web 使用 HTTP 作傳輸層協(xié)議,以封裝 HTTP 文本信息,然后使用 TCP/IP 做傳輸層協(xié)議,將數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)上。
WebSocket是HTML5一種新的協(xié)議。它實現(xiàn)了瀏覽器與服務(wù)器全雙工通信(不知道的可以看下全雙工通信RS-422標準),能更好的節(jié)省服務(wù)器資源和帶寬并達到實時通訊,它建立在TCP之上,同HTTP一樣通過TCP來傳輸數(shù)據(jù),但是它和HTTP最大不同是:
WebSocket是一種雙向通信協(xié)議,在建立連接后,WebSocket服務(wù)器和Browser/Client Agent都能主動的向?qū)Ψ桨l(fā)送或接收數(shù)據(jù),就像Socket一樣;
WebSocket需要類似TCP的客戶端和服務(wù)器端通過握手連接,連接成功后才能相互通信。
非WebSocket模式傳統(tǒng) HTTP 客戶端與服務(wù)器的交互如下:
使用 WebSocket 模式客戶端與服務(wù)器的交互如下:
WebSocket 請求響應(yīng)客戶端服務(wù)器交互圖
根據(jù)上面兩張圖對比可以看出,相對于傳統(tǒng)的HTTP每次請求-應(yīng)答都需要客戶端與服務(wù)端建立連接的模式,WebSocket是類似Socket的TCP長連接的通訊模式,一旦WebSocket連接建立后,后續(xù)數(shù)據(jù)都以幀序列的形式傳輸。在客戶端斷開WebSocket連接或Server端斷掉連接前,不需要客戶端和服務(wù)端重新發(fā)起連接請求。在海量并發(fā)及客戶端與服務(wù)器交互負載流量大的情況下,極大的節(jié)省了網(wǎng)絡(luò)帶寬資源的消耗,有明顯的性能優(yōu)勢,且客戶端發(fā)送和接受消息是在同一個持久連接上發(fā)起,實時性優(yōu)勢明顯。
如上文所述,WebSocket 的實現(xiàn)分為客戶端和服務(wù)端兩部分,客戶端(通常為瀏覽器)發(fā)出 WebSocket 連接請求,服務(wù)端響應(yīng),實現(xiàn)類似 TCP 握手的動作,從而在瀏覽器客戶端和 WebSocket 服務(wù)端之間形成一條 HTTP 長連接快速通道。兩者之間后續(xù)進行直接的數(shù)據(jù)互相傳送,不再需要發(fā)起連接和相應(yīng)。
以下簡要描述 WebSocket 服務(wù)端 API 及客戶端 API。
WebSocket 服務(wù)端 API
WebSocket 服務(wù)端在各個主流應(yīng)用服務(wù)器廠商中已基本獲得符合 JEE JSR356 標準規(guī)范 API 的支持,以下列舉了部分常見的商用及開源應(yīng)用服務(wù)器對 WebSocket Server 端的支持情況:
四、HTTP 協(xié)議
http 為短連接:客戶端發(fā)送請求都需要服務(wù)器端回送響應(yīng).請求結(jié)束后,主動釋放鏈接,因此為短連接。通常的做法是,不需要任何數(shù)據(jù),也要保持每隔一段時間向服務(wù)器發(fā)送"保持連接"的請求。這樣可以保證客戶端在服務(wù)器端是"上線"狀態(tài)。
HTTP連接使用的是"請求-響應(yīng)"方式,不僅在請求時建立連接,而且客戶端向服務(wù)器端請求后,服務(wù)器才返回數(shù)據(jù)。
五、Socket 連接
要想明白 Socket,必須要理解 TCP 連接。
TCP 三次握手:握手過程中并不傳輸數(shù)據(jù),在握手后服務(wù)器與客戶端才開始傳輸數(shù)據(jù),理想狀態(tài)下,TCP 連接一旦建立,在通訊雙方中的任何一方主動斷開連接之前 TCP 連接會一直保持下去。Socket 是對 TCP/IP 協(xié)議的封裝,Socket 只是個接口不是協(xié)議,通過 Socket 我們才能使用 TCP/IP 協(xié)議,除了 TCP,也可以使用 UDP 協(xié)議來傳遞數(shù)據(jù)。創(chuàng)建 Socket 連接的時候,可以指定傳輸層協(xié)議,可以是 TCP 或者 UDP,當(dāng)用 TCP 連接,該Socket就是個TCP連接,反之。
Socket 原理
Socket 連接,至少需要一對套接字,分為 clientSocket,serverSocket 連接分為3個步驟:
Socket為長連接:通常情況下Socket 連接就是 TCP 連接,因此 Socket 連接一旦建立,通訊雙方開始互發(fā)數(shù)據(jù)內(nèi)容,直到雙方斷開連接。在實際應(yīng)用中,由于網(wǎng)絡(luò)節(jié)點過多,在傳輸過程中,會被節(jié)點斷開連接,因此要通過輪詢高速網(wǎng)絡(luò),該節(jié)點處于活躍狀態(tài)。
很多情況下,都是需要服務(wù)器端向客戶端主動推送數(shù)據(jù),保持客戶端與服務(wù)端的實時同步。
若雙方是 Socket 連接,可以由服務(wù)器直接向客戶端發(fā)送數(shù)據(jù)。
若雙方是 HTTP 連接,則服務(wù)器需要等客戶端發(fā)送請求后,才能將數(shù)據(jù)回傳給客戶端。
因此,客戶端定時向服務(wù)器端發(fā)送請求,不僅可以保持在線,同時也詢問服務(wù)器是否有新數(shù)據(jù),如果有就將數(shù)據(jù)傳給客戶端。
文章轉(zhuǎn)自
總結(jié)
以上是生活随笔為你收集整理的Http、Socket、WebSocket之间联系与区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第三次大转型:中国居住新十年报告
- 下一篇: 新能源汽车简史——电动汽车沉浮录