關於HTTP的長鏈接和短鏈接那些事

    首先這裏簡單說起一下HTTP協議,HTTP協議是位於應用層面向對象的協議,如今WWW中使用的是HTTP/1.1版本,關於HTTP/1.0也是今天要說的內容。css

     HTTP1.1比特HTTP1.0相比而言,最大的區別就是增長了持久鏈接支持。
數據庫


     在HTTP/1.0中,默認使用的是短鏈接。即瀏覽器和服務器每進行一次HTTP操做,就會創建一次鏈接,任務結束就斷開鏈接。當瀏覽器訪問的某個HTML或其餘類型的Web頁中包含有其餘的Web資源(Js文件、css文件等),就會創建一個HTTP會話。
瀏覽器

     在HTTP/1.1起,默認使用長鏈接。用以保持鏈接特性。【長鏈接一般在響應頭會添加 Connection:keep-alive 】。使用長鏈接的狀況下,當某個網頁打開完畢以後,客戶端和服務器之間的TCP鏈接不會關閉,若是客戶端再次訪問該服務器上的網頁,會使用上一次已經創建的鏈接。長鏈接不是永久保持鏈接,它有一個保持時間。實現長鏈接的前提是客戶端和服務器端都須要支持長鏈接。安全


     咱們都知道,HTTP是基於TCP的應用層協議。HTTP的長鏈接和短鏈接,本質上是 TCP長鏈接和短鏈接。服務器

     基於TCP的協議,在數據通訊以前須要完成三次握手,結束通訊須要完成四次揮手。每次創建鏈接都是須要時間代價的。
socket


一、短鏈接ide

     模型:鏈接-----傳輸數據-----關閉鏈接網站

     短鏈接是指三次握手創建鏈接以後,client向server發送消息,而後server回覆client消息,一次讀寫操做完成以後,發起斷開鏈接請求。通常狀況下,close動做是由client發起的ui


二、長鏈接spa

     鏈接-----傳輸數據-----保持鏈接-----傳輸數據-----保持鏈接.....關閉鏈接

     長鏈接指三次握手創建鏈接後,完成一次讀寫操做,一段時間內,該鏈接不會關閉,以後若是還有向該server發起的數據讀寫,仍然使用該該鏈接。這與以前提到的TCP通訊過程相似,由於要考慮在鏈接保持期間client始終處於正常狀態(防止server端保存大量的半鏈接狀態的socket),這就要牽扯到以前的TCP維護的四個定時器中的保活寄存器。相對於短鏈接而言,長鏈接安全性通常。


三、長鏈接和短鏈接的特色

    對於短鏈接而言,管理起來較爲簡單,由於短鏈接存在的鏈接都是有效的,不需使用額外的方法來維護;帶來的缺點就是屢次創建鏈接的請求,時間代價較大,佔用的帶寬也是一個很大的問題。

     對於長鏈接,client端一般不會主動關閉鏈接,而是由服務器決定的。所以server須要提供一套機制來管理這些保持的鏈接。若是client鏈接server以後,長時間沒有進行傳遞,大量的client鏈接會使server的負擔加劇,所以server須要提供一種機制,用來關閉即便client處於正常狀態但長時間沒有進行數據通訊的鏈接,若是條件容許,能夠在server端限制最大鏈接數,來避免個別客戶端對服務器的拖累。


四、使用場合

      長鏈接多用於操做頻繁,點對點的通訊,且鏈接數不太多的狀況。如數據庫的鏈接使用長鏈接。短鏈接要求每次數據處理以前,都須要創建鏈接,對於須要大量訪問數據庫的操做,創建鏈接是對資源極大的浪費,並且容易致使socket錯誤。

     短鏈接一般用於大型網站的訪問。緣由很簡單,成千上萬的client訪問server,若是每一個client保持一個鏈接,服務器是難以負荷的。即便能夠調度,代價也是很大的。


        -----muhuizz整理

相關文章
相關標籤/搜索