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