http长/短轮询和WebSocket 的介绍和比较
生活随笔
收集整理的這篇文章主要介紹了
http长/短轮询和WebSocket 的介绍和比较
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【1】http協議介紹
1)介紹:http協議是請求/響應范式的,每個http 響應都對應一個 http 請求,http協議是無狀態的,多個http請求之間是沒有關系的;
2)http協議的被動性:在標準的HTTP請求響應語義中,瀏覽器發起請求,服務器發送一個響應,這意味著在瀏覽器發起新請求前,服務器不能發送新信息給客戶端瀏覽器;
【2】http 長輪詢 和 短輪詢 【2.1】http 長輪詢 1)介紹:http 長輪詢是server 收到請求后如果有數據,立刻響應請求;如果沒有數據 就會 停留 一段時間,這段時間內,如果 server 請求的數據到達(如查詢數據庫或數據的邏輯處理完成),就會立刻響應;如果這段時間過后,還沒有數據到達,則以空數據的形式響應http請求;若瀏覽器收到的數據為空,會再次發送同樣的http請求到server; 2)http 長輪詢 的缺點:server 沒有數據到達時,http連接會停留一段時間,這會造成服務器資源浪費; 3)看個荔枝:假設有 1000個人停留在某個客戶端頁面,等待server端的數據更新,那就很有可能服務器這邊掛著1000個線程,在不停檢測數據是否發生變化,這依然是有問題的;
【2.2】http 短輪詢 1)介紹:http 短輪詢是 server 收到請求 不管是否有數據到達都直接響應http 請求;如果瀏覽器收到的數據為空,則隔一段時間,瀏覽器又會發送相同的http請求到server 以獲取數據響應; 2) http 短輪詢的缺點:消息交互的實時性較低(server端到瀏覽器端的數據反饋效率低);
【2.3】http 長輪詢 和 短輪詢的異同 1)相同點:當server 的數據不可達時,基于http長輪詢和短輪詢 的http請求,都會 停留一段時間; 2)不同點:http長輪詢是在服務器端的停留,而http 短輪詢是在 瀏覽器端的停留; 3)性能總結:從這里可以看出,不管是長輪詢還是短輪詢,都不太適用于客戶端數量太多的情況,因為每個服務器所能承載的TCP連接數是有上限的,這種輪詢很容易把連接數頂滿;
【3】WebSocket 1)介紹:WebSocket 是 html5 規范發布的新協議,和 http協議完全是兩個不同的概念,或者說基本沒關系;WebSocket 協議 和 http協議的唯一聯系點在于,WebSocket 協議為了兼容現有瀏覽器的握手規范而采用了 http協議中的握手規范 以建立WebSocket連接; 2)WebSocket協議:其客戶端與服務器建立的是 持久連接; 3)WebSocket 解決了 HTTP 的幾個難題 3.1)難題1(http協議的被動性):采用 WebSocket 協議后,服務器可以主動推送消息給客戶端;而不需要客戶端以(長/短)輪詢的方式發起http請求到server以獲取數據更新反饋;這樣一來,客戶端只需要經過一次HTTP請求,就可以做到源源不斷的信息傳送了(在程序設計中,這種設計叫做回調,即:server 端有信息了再來通知client 端,而不是 client 端 每次都傻乎乎地跑去輪詢server端 是否有消息更新); 3.2)難題2(http協議的無狀態性/健忘性):短輪詢是每次http請求前都要建立連接,而長輪詢是相鄰幾次請求前都要建立連接;http請求響應完成后,服務器就會斷開連接,且把連接的信息全都忘記了;所以每次建立連接都要重新傳輸連接上下文(下面有補充),將 client 端的連接上下文來告訴server 端;而 WebSockct只需要一次HTTP 握手,整個通訊過程是建立在一次連接(狀態)中的,server 端會一直推送消息更新反饋到客戶端,直到客戶端關閉請求,這樣就無需 客戶端為發送消息而建立不必要的 tcp 連接 和 為了建立tcp連接而發送不必要的冗余的連接上下文消息; 4)連接上下文補充:連接上下文,如限定客戶端和服務器平臺的所有頭信息,認證屬性,負載描述等;看個荔枝:
【4】三種通信方式的優缺點
【補充】http 長連接(tcp 連接可復用) 1)介紹:http協議 目前有兩個版本:1.1 和 1.0;區別是 1.1支持 長連接(普遍使用http1.1版本),長連接也叫做持久連接(keep-alive);而1.0不支持長連接,在1.0版本下,每個http請求響應后都會關閉tcp連接,下一次http請求會重新建立http連接; 2)http 長連接:多個http 請求共用同一個 tcp 連接,這樣可以減少相鄰多次 http請求導致的 tcp連接建立和關閉的資源消耗;http1.1 在請求頭和響應頭中用 connection 字段標識 該http連接是否是 長連接,即connection: keep-alive 表示長連接;而 connection: closed 表明服務器關閉tcp 連接; 3)keep-alive:與 connection 相對應的是 keep-alive,其屬性有 timeout=30 和 max=5 分別是 兩次 http 請求 保持的時間,max表示這個tcp 連接最多被幾個 http 請求重用;
【2】http 長輪詢 和 短輪詢 【2.1】http 長輪詢 1)介紹:http 長輪詢是server 收到請求后如果有數據,立刻響應請求;如果沒有數據 就會 停留 一段時間,這段時間內,如果 server 請求的數據到達(如查詢數據庫或數據的邏輯處理完成),就會立刻響應;如果這段時間過后,還沒有數據到達,則以空數據的形式響應http請求;若瀏覽器收到的數據為空,會再次發送同樣的http請求到server; 2)http 長輪詢 的缺點:server 沒有數據到達時,http連接會停留一段時間,這會造成服務器資源浪費; 3)看個荔枝:假設有 1000個人停留在某個客戶端頁面,等待server端的數據更新,那就很有可能服務器這邊掛著1000個線程,在不停檢測數據是否發生變化,這依然是有問題的;
【2.2】http 短輪詢 1)介紹:http 短輪詢是 server 收到請求 不管是否有數據到達都直接響應http 請求;如果瀏覽器收到的數據為空,則隔一段時間,瀏覽器又會發送相同的http請求到server 以獲取數據響應; 2) http 短輪詢的缺點:消息交互的實時性較低(server端到瀏覽器端的數據反饋效率低);
【2.3】http 長輪詢 和 短輪詢的異同 1)相同點:當server 的數據不可達時,基于http長輪詢和短輪詢 的http請求,都會 停留一段時間; 2)不同點:http長輪詢是在服務器端的停留,而http 短輪詢是在 瀏覽器端的停留; 3)性能總結:從這里可以看出,不管是長輪詢還是短輪詢,都不太適用于客戶端數量太多的情況,因為每個服務器所能承載的TCP連接數是有上限的,這種輪詢很容易把連接數頂滿;
【3】WebSocket 1)介紹:WebSocket 是 html5 規范發布的新協議,和 http協議完全是兩個不同的概念,或者說基本沒關系;WebSocket 協議 和 http協議的唯一聯系點在于,WebSocket 協議為了兼容現有瀏覽器的握手規范而采用了 http協議中的握手規范 以建立WebSocket連接; 2)WebSocket協議:其客戶端與服務器建立的是 持久連接; 3)WebSocket 解決了 HTTP 的幾個難題 3.1)難題1(http協議的被動性):采用 WebSocket 協議后,服務器可以主動推送消息給客戶端;而不需要客戶端以(長/短)輪詢的方式發起http請求到server以獲取數據更新反饋;這樣一來,客戶端只需要經過一次HTTP請求,就可以做到源源不斷的信息傳送了(在程序設計中,這種設計叫做回調,即:server 端有信息了再來通知client 端,而不是 client 端 每次都傻乎乎地跑去輪詢server端 是否有消息更新); 3.2)難題2(http協議的無狀態性/健忘性):短輪詢是每次http請求前都要建立連接,而長輪詢是相鄰幾次請求前都要建立連接;http請求響應完成后,服務器就會斷開連接,且把連接的信息全都忘記了;所以每次建立連接都要重新傳輸連接上下文(下面有補充),將 client 端的連接上下文來告訴server 端;而 WebSockct只需要一次HTTP 握手,整個通訊過程是建立在一次連接(狀態)中的,server 端會一直推送消息更新反饋到客戶端,直到客戶端關閉請求,這樣就無需 客戶端為發送消息而建立不必要的 tcp 連接 和 為了建立tcp連接而發送不必要的冗余的連接上下文消息; 4)連接上下文補充:連接上下文,如限定客戶端和服務器平臺的所有頭信息,認證屬性,負載描述等;看個荔枝:
【4】三種通信方式的優缺點
| 瀏覽器支持 | 幾乎所有現代瀏覽器 | 幾乎所有現代瀏覽器 | IE 10+ Edge Firefox 4+ Chrome 4+ Safari 5+ Opera 11.5+ |
| 服務器負載 | 較少的CPU資源,較多的內存資源和帶寬資源 | 與傳統輪詢相似,但是占用帶寬較少 | 無需循環等待(長輪詢),CPU和內存資源不以客戶端數量衡量,而是以客戶端事件數衡量。三種方式里性能最佳。 |
| 客戶端負載 | 占用較多的內存資源與請求數。 | 與傳統輪詢相似。 | 同Server-Sent Event。 |
| 延遲 | 非實時,延遲取決于請求間隔。 | 同傳統輪詢。 | 實時。 |
| 實現復雜度 | 非常簡單。 | 需要服務器配合,客戶端實現非常簡單。 | 需要Socket程序實現和額外端口,客戶端實現簡單。 |
【補充】http 長連接(tcp 連接可復用) 1)介紹:http協議 目前有兩個版本:1.1 和 1.0;區別是 1.1支持 長連接(普遍使用http1.1版本),長連接也叫做持久連接(keep-alive);而1.0不支持長連接,在1.0版本下,每個http請求響應后都會關閉tcp連接,下一次http請求會重新建立http連接; 2)http 長連接:多個http 請求共用同一個 tcp 連接,這樣可以減少相鄰多次 http請求導致的 tcp連接建立和關閉的資源消耗;http1.1 在請求頭和響應頭中用 connection 字段標識 該http連接是否是 長連接,即connection: keep-alive 表示長連接;而 connection: closed 表明服務器關閉tcp 連接; 3)keep-alive:與 connection 相對應的是 keep-alive,其屬性有 timeout=30 和 max=5 分別是 兩次 http 請求 保持的時間,max表示這個tcp 連接最多被幾個 http 請求重用;
總結
以上是生活随笔為你收集整理的http长/短轮询和WebSocket 的介绍和比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js解析json数组+java对象转js
- 下一篇: 电脑防窥膜帖(电脑防窥膜效果)