日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Http、Socket、WebSocket之间联系与区别

發(fā)布時(shí)間:2025/3/15 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Http、Socket、WebSocket之间联系与区别 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、WebSocket和Socket區(qū)別

可以把WebSocket想象成HTTP(應(yīng)用層),HTTP和Socket什么關(guān)系,WebSocket和Socket就是什么關(guān)系。HTTP 協(xié)議有一個(gè)缺陷:通信只能由客戶端發(fā)起,做不到服務(wù)器主動(dòng)向客戶端推送信息。WebSocket 協(xié)議它的最大特點(diǎn)就是:服務(wù)器可以主動(dòng)向客戶端推送信息,客戶端也可以主動(dòng)向服務(wù)器發(fā)送信息,是真正的雙向平等對(duì)話,屬于服務(wù)器推送技術(shù)的一種

二、socket和http的區(qū)別

  • Http協(xié)議:簡(jiǎn)單的對(duì)象訪問(wèn)協(xié)議,對(duì)應(yīng)于應(yīng)用層。Http協(xié)議是基于TCP鏈接的。 tcp協(xié)議:對(duì)應(yīng)于傳輸層 ip協(xié)議:對(duì)應(yīng)與網(wǎng)絡(luò)層
  • TCP/IP是傳輸層協(xié)議,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸;而Http是應(yīng)用層協(xié)議,主要解決如何包裝數(shù)據(jù)。
  • Socket是對(duì)TCP/IP協(xié)議的封裝,Socket本身并不是協(xié)議,而是一個(gè)調(diào)用接口(API),通過(guò)Socket,我們才能使用TCP/IP協(xié)議。
  • Http連接:http連接就是所謂的短連接,及客戶端向服務(wù)器發(fā)送一次請(qǐng)求,服務(wù)器端相應(yīng)后連接即會(huì)斷掉。
  • socket連接:socket連接及時(shí)所謂的長(zhǎng)連接,理論上客戶端和服務(wù)端一旦建立連接,則不會(huì)主動(dòng)斷掉;但是由于各種環(huán)境因素可能會(huì)是連接斷開(kāi),比如說(shuō):服務(wù)器端或客戶端主機(jī)down了,網(wǎng)絡(luò)故障,或者兩者之間長(zhǎng)時(shí)間沒(méi)有數(shù)據(jù)傳輸,網(wǎng)絡(luò)防火墻可能會(huì)斷開(kāi)該鏈接已釋放網(wǎng)絡(luò)資源。所以當(dāng)一個(gè)socket連接中沒(méi)有數(shù)據(jù)的傳輸,那么為了位置連續(xù)的連接需要發(fā)送心跳消息,具體心跳消息格式是開(kāi)發(fā)者自己定義的。
  • HTTP的長(zhǎng)連接一般就只能堅(jiān)持一分鐘而已,而且是瀏覽器決定的,你的頁(yè)面很難控制這個(gè)行為。Socket連接就可以維持很久,幾天、數(shù)月都有可能,只要網(wǎng)絡(luò)不斷、程序不結(jié)束,而且是可以編程靈活控制的。
  • HTTP連接是建立在Socket連接之上。在實(shí)際的網(wǎng)絡(luò)棧中,Socket連接的確是HTTP連接的一部分。但是從HTTP協(xié)議看,它的連接一般是指它本身的那部分。
  • TCP/IP協(xié)議棧主要分為四層:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層,

    每層都有相應(yīng)的協(xié)議,如下圖

  • IP:網(wǎng)絡(luò)層協(xié)議;(高速公路)
  • TCP和UDP: 傳輸層協(xié)議;(卡車(chē))
  • HTTP: 應(yīng)用層協(xié)議;(貨物)。HTTP(超文本傳輸協(xié)議)是利用TCP在兩臺(tái)電腦(通常是Web服務(wù)器和客戶端)之間傳輸信息的協(xié)議。客戶端使用Web瀏覽器發(fā)起HTTP請(qǐng)求給Web服務(wù)器,Web服務(wù)器發(fā)送被請(qǐng)求的信息給客戶端。
  • SOCKET: 套接字,TCP/IP網(wǎng)絡(luò)的API。(港口碼頭/車(chē)站)Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層,它是一組接口。socket是在應(yīng)用層和傳輸層之間的一個(gè)抽象層,它把TCP/IP層復(fù)雜的操作抽象為幾個(gè)簡(jiǎn)單的接口供應(yīng)用層調(diào)用已實(shí)現(xiàn)進(jìn)程在網(wǎng)絡(luò)中通信。
  • TCP/IP: 代表傳輸控制協(xié)議/網(wǎng)際協(xié)議,指的是一系列協(xié)議,TCP/IP 模型在 OSI
    模型的基礎(chǔ)上進(jìn)行了簡(jiǎn)化,變成了四層,從下到上分別為:網(wǎng)絡(luò)接口層、網(wǎng)絡(luò)層、傳輸層、應(yīng)用層。與 OSI 體系結(jié)構(gòu)對(duì)比如下:
  • TCP/UDP區(qū)別:
  • TCP:(傳輸控制協(xié)議,Transmission Control Protocol):(類似打電話)

    面向連接、傳輸可靠(保證數(shù)據(jù)正確性)、有序(保證數(shù)據(jù)順序)、傳輸大量數(shù)據(jù)(流模式)、速度慢、對(duì)系統(tǒng)資源的要求多,程序結(jié)構(gòu)較復(fù)雜,每一條TCP連接只能是點(diǎn)到點(diǎn)的,TCP首部開(kāi)銷20字節(jié)。

    UDP:(用戶數(shù)據(jù)報(bào)協(xié)議,User Data Protocol):(類似發(fā)短信)

    面向非連接 、傳輸不可靠(可能丟包)、無(wú)序、傳輸少量數(shù)據(jù)(數(shù)據(jù)報(bào)模式)、速度快,對(duì)系統(tǒng)資源的要求少,程序結(jié)構(gòu)較簡(jiǎn)單 ,UDP支持一對(duì)一,一對(duì)多,多對(duì)一和多對(duì)多的交互通信,
    UDP的首部開(kāi)銷小,只有8個(gè)字節(jié)。

    三、Websocket

  • Websocket協(xié)議解決了服務(wù)器與客戶端全雙工通信的問(wèn)題。
  • 注:什么是單工、半雙工、全工通信?

  • 信息只能單向傳送為單工;
  • 信息能雙向傳送但不能同時(shí)雙向傳送稱為半雙工;
  • 信息能夠同時(shí)雙向傳送則稱為全雙工。
  • wensocket協(xié)議包含兩部分:一部分是“握手”,一部分是“數(shù)據(jù)傳輸”。
    要弄明白 http 和 socket 首先要熟悉網(wǎng)絡(luò)七層:物 數(shù) 網(wǎng) 傳 會(huì) 表 應(yīng),如圖:

  • HTTP 協(xié)議:超文本傳輸協(xié)議,對(duì)應(yīng)于應(yīng)用層,用于如何封裝數(shù)據(jù).
  • TCP/UDP 協(xié)議:傳輸控制協(xié)議,對(duì)應(yīng)于傳輸層,主要解決數(shù)據(jù)在網(wǎng)絡(luò)中的傳輸。
  • IP 協(xié)議:對(duì)應(yīng)于網(wǎng)絡(luò)層,同樣解決數(shù)據(jù)在網(wǎng)絡(luò)中的傳輸。
  • 傳輸數(shù)據(jù)的時(shí)候只使用 TCP/IP 協(xié)議(傳輸層),如果沒(méi)有應(yīng)用層來(lái)識(shí)別數(shù)據(jù)內(nèi)容,傳輸后的協(xié)議都是無(wú)用的。應(yīng)用層協(xié)議很多 FTP,HTTP,TELNET等,可以自己定義應(yīng)用層協(xié)議。
    web 使用 HTTP 作傳輸層協(xié)議,以封裝 HTTP 文本信息,然后使用 TCP/IP 做傳輸層協(xié)議,將數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)上。

  • websocket協(xié)議解析
  • WebSocket是HTML5一種新的協(xié)議。它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工通信(不知道的可以看下全雙工通信RS-422標(biāo)準(zhǔn)),能更好的節(jié)省服務(wù)器資源和帶寬并達(dá)到實(shí)時(shí)通訊,它建立在TCP之上,同HTTP一樣通過(guò)TCP來(lái)傳輸數(shù)據(jù),但是它和HTTP最大不同是:

  • WebSocket是一種雙向通信協(xié)議,在建立連接后,WebSocket服務(wù)器和Browser/Client Agent都能主動(dòng)的向?qū)Ψ桨l(fā)送或接收數(shù)據(jù),就像Socket一樣;

  • WebSocket需要類似TCP的客戶端和服務(wù)器端通過(guò)握手連接,連接成功后才能相互通信。

  • 非WebSocket模式傳統(tǒng) HTTP 客戶端與服務(wù)器的交互如下:

    使用 WebSocket 模式客戶端與服務(wù)器的交互如下:
    WebSocket 請(qǐng)求響應(yīng)客戶端服務(wù)器交互圖

    根據(jù)上面兩張圖對(duì)比可以看出,相對(duì)于傳統(tǒng)的HTTP每次請(qǐng)求-應(yīng)答都需要客戶端與服務(wù)端建立連接的模式,WebSocket是類似Socket的TCP長(zhǎng)連接的通訊模式,一旦WebSocket連接建立后,后續(xù)數(shù)據(jù)都以幀序列的形式傳輸。在客戶端斷開(kāi)WebSocket連接或Server端斷掉連接前,不需要客戶端和服務(wù)端重新發(fā)起連接請(qǐng)求。在海量并發(fā)及客戶端與服務(wù)器交互負(fù)載流量大的情況下,極大的節(jié)省了網(wǎng)絡(luò)帶寬資源的消耗,有明顯的性能優(yōu)勢(shì),且客戶端發(fā)送和接受消息是在同一個(gè)持久連接上發(fā)起,實(shí)時(shí)性優(yōu)勢(shì)明顯。

  • WebSocket 實(shí)現(xiàn)
  • 如上文所述,WebSocket 的實(shí)現(xiàn)分為客戶端和服務(wù)端兩部分,客戶端(通常為瀏覽器)發(fā)出 WebSocket 連接請(qǐng)求,服務(wù)端響應(yīng),實(shí)現(xiàn)類似 TCP 握手的動(dòng)作,從而在瀏覽器客戶端和 WebSocket 服務(wù)端之間形成一條 HTTP 長(zhǎng)連接快速通道。兩者之間后續(xù)進(jìn)行直接的數(shù)據(jù)互相傳送,不再需要發(fā)起連接和相應(yīng)。
    以下簡(jiǎn)要描述 WebSocket 服務(wù)端 API 及客戶端 API。

    WebSocket 服務(wù)端 API
    WebSocket 服務(wù)端在各個(gè)主流應(yīng)用服務(wù)器廠商中已基本獲得符合 JEE JSR356 標(biāo)準(zhǔn)規(guī)范 API 的支持,以下列舉了部分常見(jiàn)的商用及開(kāi)源應(yīng)用服務(wù)器對(duì) WebSocket Server 端的支持情況:

    四、HTTP 協(xié)議

    http 為短連接:客戶端發(fā)送請(qǐng)求都需要服務(wù)器端回送響應(yīng).請(qǐng)求結(jié)束后,主動(dòng)釋放鏈接,因此為短連接。通常的做法是,不需要任何數(shù)據(jù),也要保持每隔一段時(shí)間向服務(wù)器發(fā)送"保持連接"的請(qǐng)求。這樣可以保證客戶端在服務(wù)器端是"上線"狀態(tài)。

    HTTP連接使用的是"請(qǐng)求-響應(yīng)"方式,不僅在請(qǐng)求時(shí)建立連接,而且客戶端向服務(wù)器端請(qǐng)求后,服務(wù)器才返回?cái)?shù)據(jù)。

    五、Socket 連接

    要想明白 Socket,必須要理解 TCP 連接。

    TCP 三次握手:握手過(guò)程中并不傳輸數(shù)據(jù),在握手后服務(wù)器與客戶端才開(kāi)始傳輸數(shù)據(jù),理想狀態(tài)下,TCP 連接一旦建立,在通訊雙方中的任何一方主動(dòng)斷開(kāi)連接之前 TCP 連接會(huì)一直保持下去。Socket 是對(duì) TCP/IP 協(xié)議的封裝,Socket 只是個(gè)接口不是協(xié)議,通過(guò) Socket 我們才能使用 TCP/IP 協(xié)議,除了 TCP,也可以使用 UDP 協(xié)議來(lái)傳遞數(shù)據(jù)。創(chuàng)建 Socket 連接的時(shí)候,可以指定傳輸層協(xié)議,可以是 TCP 或者 UDP,當(dāng)用 TCP 連接,該Socket就是個(gè)TCP連接,反之。

    Socket 原理

    Socket 連接,至少需要一對(duì)套接字,分為 clientSocket,serverSocket 連接分為3個(gè)步驟:

  • 服務(wù)器監(jiān)聽(tīng):服務(wù)器并不定位具體客戶端的套接字,而是時(shí)刻處于監(jiān)聽(tīng)狀態(tài);
  • 客戶端請(qǐng)求:客戶端的套接字要描述它要連接的服務(wù)器的套接字,提供地址和端口號(hào),然后向服務(wù)器套接字提出連接請(qǐng)求;
  • 連接確認(rèn):當(dāng)服務(wù)器套接字收到客戶端套接字發(fā)來(lái)的請(qǐng)求后,就響應(yīng)客戶端套接字的請(qǐng)求,并建立一個(gè)新的線程,把服務(wù)器端的套接字的描述發(fā)給客戶端。一旦客戶端確認(rèn)了此描述,就正式建立連接。而服務(wù)器套接字繼續(xù)處于監(jiān)聽(tīng)狀態(tài),繼續(xù)接收其他客戶端套接字的連接請(qǐng)求.
  • Socket為長(zhǎng)連接:通常情況下Socket 連接就是 TCP 連接,因此 Socket 連接一旦建立,通訊雙方開(kāi)始互發(fā)數(shù)據(jù)內(nèi)容,直到雙方斷開(kāi)連接。在實(shí)際應(yīng)用中,由于網(wǎng)絡(luò)節(jié)點(diǎn)過(guò)多,在傳輸過(guò)程中,會(huì)被節(jié)點(diǎn)斷開(kāi)連接,因此要通過(guò)輪詢高速網(wǎng)絡(luò),該節(jié)點(diǎn)處于活躍狀態(tài)。

    很多情況下,都是需要服務(wù)器端向客戶端主動(dòng)推送數(shù)據(jù),保持客戶端與服務(wù)端的實(shí)時(shí)同步。

    若雙方是 Socket 連接,可以由服務(wù)器直接向客戶端發(fā)送數(shù)據(jù)。
    若雙方是 HTTP 連接,則服務(wù)器需要等客戶端發(fā)送請(qǐng)求后,才能將數(shù)據(jù)回傳給客戶端。

    因此,客戶端定時(shí)向服務(wù)器端發(fā)送請(qǐng)求,不僅可以保持在線,同時(shí)也詢問(wèn)服務(wù)器是否有新數(shù)據(jù),如果有就將數(shù)據(jù)傳給客戶端。

    文章轉(zhuǎn)自

    總結(jié)

    以上是生活随笔為你收集整理的Http、Socket、WebSocket之间联系与区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。