日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

一、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ū)別

  • Http協(xié)議:簡單的對象訪問協(xié)議,對應(yīng)于應(yīng)用層。Http協(xié)議是基于TCP鏈接的。 tcp協(xié)議:對應(yīng)于傳輸層 ip協(xié)議:對應(yīng)與網(wǎng)絡(luò)層
  • TCP/IP是傳輸層協(xié)議,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸;而Http是應(yīng)用層協(xié)議,主要解決如何包裝數(shù)據(jù)。
  • Socket是對TCP/IP協(xié)議的封裝,Socket本身并不是協(xié)議,而是一個調(diào)用接口(API),通過Socket,我們才能使用TCP/IP協(xié)議。
  • Http連接:http連接就是所謂的短連接,及客戶端向服務(wù)器發(fā)送一次請求,服務(wù)器端相應(yīng)后連接即會斷掉。
  • socket連接:socket連接及時所謂的長連接,理論上客戶端和服務(wù)端一旦建立連接,則不會主動斷掉;但是由于各種環(huán)境因素可能會是連接斷開,比如說:服務(wù)器端或客戶端主機down了,網(wǎng)絡(luò)故障,或者兩者之間長時間沒有數(shù)據(jù)傳輸,網(wǎng)絡(luò)防火墻可能會斷開該鏈接已釋放網(wǎng)絡(luò)資源。所以當(dāng)一個socket連接中沒有數(shù)據(jù)的傳輸,那么為了位置連續(xù)的連接需要發(fā)送心跳消息,具體心跳消息格式是開發(fā)者自己定義的。
  • HTTP的長連接一般就只能堅持一分鐘而已,而且是瀏覽器決定的,你的頁面很難控制這個行為。Socket連接就可以維持很久,幾天、數(shù)月都有可能,只要網(wǎng)絡(luò)不斷、程序不結(jié)束,而且是可以編程靈活控制的。
  • HTTP連接是建立在Socket連接之上。在實際的網(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é)議;(卡車)
  • HTTP: 應(yīng)用層協(xié)議;(貨物)。HTTP(超文本傳輸協(xié)議)是利用TCP在兩臺電腦(通常是Web服務(wù)器和客戶端)之間傳輸信息的協(xié)議。客戶端使用Web瀏覽器發(fā)起HTTP請求給Web服務(wù)器,Web服務(wù)器發(fā)送被請求的信息給客戶端。
  • SOCKET: 套接字,TCP/IP網(wǎng)絡(luò)的API。(港口碼頭/車站)Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層,它是一組接口。socket是在應(yīng)用層和傳輸層之間的一個抽象層,它把TCP/IP層復(fù)雜的操作抽象為幾個簡單的接口供應(yīng)用層調(diào)用已實現(xiàn)進程在網(wǎng)絡(luò)中通信。
  • TCP/IP: 代表傳輸控制協(xié)議/網(wǎng)際協(xié)議,指的是一系列協(xié)議,TCP/IP 模型在 OSI
    模型的基礎(chǔ)上進行了簡化,變成了四層,從下到上分別為:網(wǎng)絡(luò)接口層、網(wǎng)絡(luò)層、傳輸層、應(yīng)用層。與 OSI 體系結(jié)構(gòu)對比如下:
  • TCP/UDP區(qū)別:
  • 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

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

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

  • HTTP 協(xié)議:超文本傳輸協(xié)議,對應(yīng)于應(yīng)用層,用于如何封裝數(shù)據(jù).
  • TCP/UDP 協(xié)議:傳輸控制協(xié)議,對應(yīng)于傳輸層,主要解決數(shù)據(jù)在網(wǎng)絡(luò)中的傳輸。
  • IP 協(xié)議:對應(yīng)于網(wǎng)絡(luò)層,同樣解決數(shù)據(jù)在網(wǎng)絡(luò)中的傳輸。
  • 傳輸數(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協(xié)議解析
  • 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)
  • 如上文所述,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個步驟:

  • 服務(wù)器監(jiān)聽:服務(wù)器并不定位具體客戶端的套接字,而是時刻處于監(jiān)聽狀態(tài);
  • 客戶端請求:客戶端的套接字要描述它要連接的服務(wù)器的套接字,提供地址和端口號,然后向服務(wù)器套接字提出連接請求;
  • 連接確認:當(dāng)服務(wù)器套接字收到客戶端套接字發(fā)來的請求后,就響應(yīng)客戶端套接字的請求,并建立一個新的線程,把服務(wù)器端的套接字的描述發(fā)給客戶端。一旦客戶端確認了此描述,就正式建立連接。而服務(wù)器套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求.
  • 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)容,希望文章能夠幫你解決所遇到的問題。

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