socket中的長連線和短連線淺析
socket中的長連線和短連線
長連線和短連線
當網路通訊時採用TCP協議時,需在通訊雙方間建立連線,當讀寫操作完成後不再需要這個連線時就可以釋放這個連線。
所謂的短連線就是通訊雙方建立一個TCP連線,完成資料傳送後即斷開此連線。
長連線是針對短連結而言,也就是長時間保持通訊雙方的連線狀態,即在一個TCP連線上可以連續傳送多個數據包,在TCP連線保持期間,如果在一段時間內沒有資料包傳送,則需要通訊雙方發檢測包(心跳包)以維持此連線。
傳輸方式
短連線操作步驟通常是:
建立連線→資料傳輸→關閉連線;
而長連線通常是:
建立連線→資料傳輸→保持連線(心跳)→資料傳輸→保持連線(心跳)→……→關閉連線;
區別與用途
短連線:
短連線一般用於點對多,高連線量的情況,比如HTTP服務等。因為對於Web這種有高訪問量高併發的伺服器而言,如果對每個使用者都維護一個長連線的話,這對伺服器是一個不可承擔的壓力,所以當併發量大但客戶無需頻繁操作的情況下可以採用短連線,這樣管理起來比較簡單,存在的連線都是有用的連線,不需要額外的控制手段來維持連線。
長連線:
通訊的雙方的TCP連線的建立是需要三次握手,釋放則需要四次揮手,可見每次連線的建立都是需要消耗系統資源和時間的,所以對於需要操作頻繁,點對點的通訊,而且連線數不能太多的情況通常會選擇採用長連線。因為如果每次操作都要建立連線然後再操作的話處理速度會降低,所以每次操作下次操作時直接傳送資料就可以了,不用再建立TCP連線。
例如:對於資料庫的連線一般採用長連線,因為頻繁的短連線通訊容易造成socket錯誤,socket的頻繁建立也是對資源的浪費。但是對於長連線而言,其TCP連線不會被客戶端主動關閉,如果隨著客戶端接入數量增大,伺服器負載壓力就會不斷增大,這時也需要伺服器端採取策略來對一些”僵死“連線進行關閉或者限制最大接入長連線數,以此來防止伺服器壓力過大而崩潰。
長連線和短連線區別在於通訊雙方對於連線採取的關閉策略,沒有十全十美的方案,所以選擇時還應該根據具體運用場景因地制宜才是。