1. 程式人生 > >長連線與短連線的區別以及使用場景

長連線與短連線的區別以及使用場景

首先介紹下短連結和長連線的區別:
短連線

連線->傳輸資料->關閉連線
比如HTTP是無狀態的的短連結,瀏覽器和伺服器每進行一次HTTP操作,就建立一次連線,但任務結束就中斷連線。
具體就是 瀏覽器client發起並建立TCP連線 -> client傳送HttpRequest報文 -> server接收到報文->server handle併發送HttpResponse報文給前端,傳送完畢之後立即呼叫socket.close方法->client接收response報文->client最終會收到server端斷開TCP連線的訊號->client 端斷開TCP連線,具體就是呼叫close方法。

也可以這樣說:短連線是指SOCKET連線後,傳送接收完資料後馬上斷開連線。
因為連線後接收了資料就斷開了,所以每次資料接受處理不會有聯絡。 這也是HTTP協議無狀態的原因之一。

長連線
連線->傳輸資料->保持連線 -> 傳輸資料-> ...........->直到一方關閉連線,多是客戶端關閉連線。
長連線指建立SOCKET連線後不管是否使用都保持連線,但安全性較差。

HTTP在短連結和長連線上的選擇:

HTTP是無狀態的 ,也就是說,瀏覽器和伺服器每進行一次HTTP操作,就建立一次連線,但任務結束就中斷連線。如果客戶端瀏覽器訪問的某個HTML或其他型別的 Web頁中包含有其他的Web資源,如JavaScript檔案、影象檔案、CSS檔案等;當瀏覽器每遇到這樣一個Web資源,就會建立一個HTTP會話

HTTP1.1和HTTP1.0相比較而言,最大的區別就是增加了持久連線支援(貌似最新的HTTP1.1 可以顯示的指定 keep-alive),但還是無狀態的,或者說是不可以信任的。
如果瀏覽器或者伺服器在其頭資訊加入了這行程式碼 Connection:keep-alive
TCP連線在傳送後將仍然保持開啟狀態,於是,瀏覽器可以繼續通過相同的連線傳送請求。保持連線節省了為每個請求建立新連線所需的時間,還節約了頻寬。
實現長連線要客戶端和服務端都支援長連線。

什麼時候用長連線,短連線?
長連線多用於操作頻繁,點對點的通訊,而且連線數不能太多情況,。每個TCP連線都需要三步握手,這需要時間,如果每個操作都是先連線,再操作的話那麼處理速度會降低很多,所以每個操作完後都不斷開,次處理時直接傳送資料包就OK了,不用建立TCP連線。例如:資料庫的連線用長連線, 如果用短連線頻繁的通訊會造成socket錯誤,而且頻繁的socket 建立也是對資源的浪費。

而像WEB網站的http服務一般都用短連結,因為長連線對於服務端來說會耗費一定的資源,而像WEB網站這麼頻繁的成千上萬甚至上億客戶端的連線用短連線會更省一些資源,如果用長連線,而且同時有成千上萬的使用者,如果每個使用者都佔用一個連線的話,那可想而知吧。所以併發量大,但每個使用者無需頻繁操作情況下需用短連好。

總之,長連線和短連線的選擇要視情況而定。

具體網路中的應用的話:

http 1.0一般就指短連線,smtp,pop3,telnet這種就可以認為是長連線。一般的網路遊戲應用都是長連線