概念:
Websocket 是HTML5出的東西(協議),也就是說HTTP協議沒有變化,但HTTP是不支持持久連接的(長連接,回圈連接的不算),
Websocket是一個持久化的協議,相對于HTTP這種非持久的協議來說,可以把 WebSocket 看成是 HTTP 協議為了支持長連接所打的一個大補丁

Websocket只需要一次HTTP握手,就可以做到源源不斷的資訊傳送了,(在程式設計中,這種設計叫做回呼,即:你有資訊了再來通知我,而不是我傻乎乎的每次跑來問你), WebSocket 還是一個雙通道的連接,在同一個 TCP 連接上可以多次 發 , 收 資訊,由客戶主動詢問,轉換為服務器(推送)有資訊的時候就發送(當然客戶端還是等主動發送資訊過來的,,)
內容拓展:
HTTP1.0: 每次請求都要創建TCP連接(就是一個Request 對應一個Response)
HTTP1.1: 進行了改進,它默認開啟長連接 keep-alive(使用keep-alive引數來告知服務器端要建立一個長連接) ,也就是說,在一個TCP連接中,可以發送多個Http的Request,接收多個Response(一個TCP連接上可以傳送多個HTTP請求和回應)
//在請求頭header里,由瀏覽器/服務器添加 Connection:keep-alive備注:但是請記住 Request = Response , 在HTTP中永遠是這樣,也就是說一個request只能有一個response,而且這個response 也是 被動的,不能主動發起,
建立持久連接的方式:
1: ajax輪詢: 讓瀏覽器隔個幾秒就發送一次請求,詢問服務器是否有新資訊,
request--->response , request--->response , request--->response ........ loop
3: long poll :采取的是阻塞模型(一直打電話,沒收到就不掛電話)
request--->,,,,,,,reponse(沒有訊息,就不回傳reponse,等待到有訊息的時候,再給你(Response))
下個訊息獲取再次建立連接:request--->,,,,reponse(沒有訊息,就不回傳reponse)
所謂的 polling 是指從客戶端(一般就是瀏覽器)不斷主動的向服務器發 HTTP 請求 查詢是否有新資料
上面 兩種方式都是在不斷地建立HTTP連接,然后等待服務端處理,可以體現HTTP協議的另外一個特點,被動性(服務端不能主動聯系客戶端,只能有客戶端發起),
3: webscoket: 只需建立一次連接后,就可以源源不斷 收 ,發 資訊了,形成了通道,
參考資料:
https://www.zhihu.com/question/20215561
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/317864.html
標籤:其他
上一篇:資料鏈路層(2)封裝成幀
下一篇:透明代理(NAT)
