WebSocket 是什麼原理?為什麼可以實現持久連線?

時間 2021-05-05 14:23:26

1樓:Admin

先MARK一下,答案挺好的,感覺還有兩個問題讓我不是特別清楚的:

1)client和server如何通過Sec-WebSocket-Protocol確認建立鏈結 ?

RFC 6455 - The WebSocket Protocol 的1.3節Opening Handshake 寫的特別清晰

2)為什麼可以實現持久連線(建立的連線為什麼是持久的)?

有空再來整理下

2樓:Kent Zhang

其實簡單來講: WebSocket並不屬於Http或https,只不過是為了用回無處不在的80埠開放性的環境,借http開一下路而已,C/S雙方建立連線之後,就通過WebSocket建立ws或wss通訊協議,建立了ws之後,一開始那個http或https的乙個會話已經完結了,剩下的就是那對socket的兩個程序在使用socket在通訊。而socket基TCP協議就可以寫時長連線(是否支援UDP就不清楚).

說白了,就是把以前我們做桌面程式時候使用的Socket方式移到瀏覽器上,在瀏覽器上做一套Socket,並提供介面供JS指令碼來呼叫。但為了盡可能大地利用現有http協議打下的的廣泛市場環境,就先使用http(80# port)來建立連線,並且接下來還是使用80來通訊,當然為了你的伺服器可以再次響應來自其它客戶端的http請求,你也可以在切換ws協議的時候,自定義另外乙個埠,請原來的http服務繼續提供服務(這個不太確定行不行,望大牛指教.)。

這比我們以前寫socket程式的時候,先定好埠,再去找網管,服管申請開端口方便多了。

所以題主有疑問的訂問題是,以為帶Web就必須走http,其實也可以用http打頭,然後建立另一種有狀態的協議ws的。

3樓:villainHR

哈?HTTP 協議?

WebSocket 是基於 TCP 協議的和 HTTP 一樣,只是中間封了一層 HTTP 的殼。簡而言之,關鍵點就在於。它返回的響應頭:

Request URL:wss://remy-ws.glitch.me/

Request Method:GET

Status Code:101 Switching Protocols

後面就沒 HTTP 的事情了。

你可以參考一下:通訊方式高階 | villianHR

4樓:Ryou ikonn

高票答案的敘事能力堪憂。文章過於賣萌而降低了對真正有用的資訊的訊雜比。

網路連線的本質上就是通訊,那麼通訊不管你是用嘴喊還是用揮手還是網路上發乙個光電訊號其實原理都是一樣的。

電腦的介面不停的接受訊號,和你的耳朵不停的接受聲音有什麼區別?

想象一下,如果這個世界上沒有網路,只有書信的方式通訊,你的ip和伺服器的ip的區別只有乙個是不知名乙個是知名的區別,乙個好找乙個不好找的區別。你是動態ip,你可以把你自己想象成乙個經常在宿舍教學樓酒吧到處亂跑的毛孩子,而給你分配動態ip的路由就相當於是那些指揮你去上課指揮你去睡覺的人,他們知道你在哪。而伺服器買的靜態ip,只是他們的ip被更多的人(dns)等知道在那,能更快的找到的區別。

要與伺服器通訊。好比,你要找歐巴馬發一封信,很好找,而歐巴馬回信卻不知道你在什麼旮旯裡,他回信不需要記憶你的位址只需要送信的告訴原路返回即可,這就是http,它是無狀態的無記憶的。websocket tcp連線就是歐巴馬已經記住你的位址了,這樣他可以直接向你發信。

歐巴馬擔心你收不到信,比如如果你已經掛了,或者送信的掛了他還會每秒鐘都發乙個訊號給你,確認你是不是能夠收到信,如果真的收不到了就不在給你發了,那就是心跳。

5樓:justin zhang

The WebSocket Protocol is an independent TCP-based protocol. Its

only relationship to HTTP is that its handshake is interpreted by

HTTP servers as an Upgrade request.

By default, the WebSocket Protocol uses port 80 for regular WebSocket

connections and port 443 for WebSocket connections tunneled over

Transport Layer Security (TLS)

6樓:千鋒互聯

可以把 WebSocket 看成是 HTTP 協議為了支援長連線所打的乙個大補丁,它和 HTTP 有一些共性,是為了解決 HTTP 本身無法解決的某些問題而做出的乙個改良設計。

WebSocket 解決的第乙個問題是,通過第乙個 HTTP request 建立了 TCP 連線,之後的交換資料都不需要再發 HTTP request了,使得這個長連線變成了乙個真正的長連線。不需要傳送 HTTP

header就能交換資料顯然和原有的 HTTP 協議是有區別的,所以它需要對伺服器和客戶端都進行公升級才能實現。在此基礎上 WebSocket 還是乙個雙通道的連線,在同乙個 TCP 連線上既可以發也可以收資訊。此外還有 multiplexing 功能,幾個不同的 URI 可以復用同乙個 WebSocket 連線。

這些都是原來的 HTTP 不能做到的。

7樓:anchen

把支援http的TCP server,變成長連線的Web socket server…說白就是瀏覽器和伺服器都支援長連線而已……自己寫乙個Web socket server實現就明白了

8樓:鄭Ryan

總結下:tcp是通訊層協議,全雙工同行,(連線後,A,B兩端同時交流)

再TCP協議基礎上的兩個應用層協議,http,webscoket協議,

webscoket協議是全雙工通訊,不過需要用類似於http的方式和後台建立鏈結,然後通訊。

9樓:

讀讀websocket protocol不就都清楚了, websocket是基於tcp的, 出了建立連線時用的http請求, 其他和http毛關係也沒有, 你就當作tcp就行

10樓:lhelpme

websocket和http 協議屬於應用層協議,都是基於tcp協議。

瀏覽器實現了該協議,並且提供了介面,供客戶端呼叫, web伺服器同時也實現了該協議,使伺服器可以處理基於該協議的資料報文。

websocket 協議是基於當前web 環境所設計,為web開發提供長連線功能。

html5 規範本身包含有websocket協議,意味著遵循該規範的瀏覽器必須實現該協議,因此作為客戶端開發人員,就可以直接使用對應的api介面。

同時遵循該協議的web伺服器也提供介面給服務端開發人員,這樣節省很多任務作量。

之前沒有websocket,必須通過瀏覽器外掛程式形式,擴充套件功能,例如flash外掛程式,unity外掛程式,這些外掛程式必須對每個主流瀏覽器去分別實現,工作量大,使用者體驗差。

11樓:高林飛

用cordova開發手機客戶端,使用websocket進行通訊,websocket始終處於半死不活的狀態怎麼辦,連線成功之後的那一小段時間,功能都是正常的,過了一段時間之後(時間有時長有時短),send方法不能把訊息法向服務端,服務端的訊息也發不回來(onmessage得不到時間通知),如果伺服器關了,或者把手機網路關了,onclose卻能收件close事件通知,感覺自己跳進了websocket的坑里了,想問大家遇到類似情況嗎,怎麼解決的。

12樓:

websocket約定了乙個通訊的規範,通過乙個握手的機制,客戶端和伺服器之間能建立乙個類似tcp的連線,從而方便它們之間的通訊。在websocket出現之前,web互動一般是基於http協議的短連線或者長連線。websocket是一種全新的協議,不屬於http無狀態協議,協議名為"ws",這意味著乙個websocket連線位址會是這樣的寫法:

ws://**。websocket協議本質上是乙個基於tcp的協議。

分析HTML5中WebSocket的原理

13樓:長風

HTTP和WebSocket都是應用層協議,傳輸層協議是TCP,應用層解決如何包裝資料問題,HTTP和WebSocket兩者的差距不大。

瀏覽網頁時,經過三個過程

1、瀏覽器經過三次握手與web伺服器建立鏈結,2、web伺服器返回響應

3、瀏覽器通過四次握手主動斷開鏈結

因為第三步導致不能持久鏈結,那我們去掉第三步不就可以了實現持久鏈結了嗎?這就是WebSocket與HTTP最大的不同(Web伺服器是不會主動斷開連線的),當然還有更多的資料封裝格式的不同。

可以看到WebSocket是在HTTP上做的改動,我曾經用微控制器的TCP/IP協議棧封裝符合HTTP協議格式的字串,去連線Web伺服器。WebSocket和HTML5沒有多大關係。

14樓:任文龍

"或者說WebSocket乾脆就不是基於HTTP來執行的",這句是對的,WebSocket 和 HTTP 都是基於 TCP 的,TCP是傳輸層協議, WebSocket 和 HTTP是應用層協議,就是因為HTTP不能滿足特定的需求才被設計出來的,所以會支援你說的那些特性。

MQTT和Websocket的區別是什麼?

lIIllIlII WebSocket實現的是Web Client端和伺服器端的長連線 即 管道。避免了RESTful那樣的短連線 節省的是多次握手的開銷。MQTT實現的是 發布 訂閱 模型 名字裡就有Message Queue 不保持Client和Broker之間的連線。MQTT的接收廣播的訊息是...

DNA是什麼原理?

不知道問的是分子層面的還是原子層面的.看樣子是問的DNA為什麼會進行表達,或者說是DNA達標的是如何實現的?或者為什麼會實現這種表達。簡而言之,DNA上面的脫氧核糖核酸分為四種,AGCT,當然,這種叫法是人為定義的,分別代表了乙個有機分子。在官能團的作用下,不同的脫氧核糖核酸之間結合,這種結合若是有...

泡水是什麼原理

清輕的笑 泡水這個問題問的好。前置問題引審開來就是 為什麼要吃,喝?吃喝的目的是什麼?當然是為了提供能量,維持機體代謝所需。再進一步就是為了口感。泡水,舉例茶來講。乾茶能吃麼?如果只是為了攝入茶內含物,我覺得也不是不可以。但口感肯定沒茶水那麼好就是了。那麼泡水第乙個功效就出來了,稀釋。用泡水的過程,...