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

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

     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的協議,在數據通信之前需要完成三次握手,結束通信需要完成四次揮手。每次建立連接都是需要時間代價的。


1、短連接

     模型:連接-----傳輸數據-----關閉連接

     短連接是指三次握手建立連接之後,client向server發送消息,然後server回覆client消息,一次讀寫操作完成之後,發起斷開連接請求。一般情況下,close動作是由client發起的


2、長連接

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

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


3、長連接和短連接的特點

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

     對於長連接,client端通常不會主動關閉連接,而是由服務器決定的。因此server需要提供一套機制來管理這些保持的連接。如果client連接server之後,長時間沒有進行傳遞,大量的client連接會使server的負擔加重,因此server需要提供一種機制,用來關閉即使client處於正常狀態但長時間沒有進行數據通信的連接,如果條件允許,可以在server端限制最大連接數,來避免個別客戶端對服務器的拖累。


4、使用場合

      長連接多用於操作頻繁,點對點的通信,且連接數不太多的情況。如數據庫的連接使用長連接。短連接要求每次數據處理之前,都需要建立連接,對於需要大量訪問數據庫的操作,建立連接是對資源極大的浪費,而且容易導致socket錯誤。

     短連接通常用於大型網站的訪問。原因很簡單,成千上萬的client訪問server,如果每個client保持一個連接,服務器是難以負荷的。即使可以調度,代價也是很大的。


        -----muhuizz整理


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章