1. 程式人生 > >HTTP長連線和短連線以及推送技術原理

HTTP長連線和短連線以及推送技術原理


建立連線——資料傳輸——關閉連線...建立連線——資料傳輸——關閉連線
長連線的操作步驟是:
建立連線——資料傳輸...(保持連線)...資料傳輸——關閉連線
4. 長連線和短連線的優點和缺點
          由上可以看出,長連線可以省去較多的TCP建立和關閉的操作,減少浪費,節約時間。對於頻繁請求資源的客戶來說,較適用長連線。不過這裡存在一個問題,存活功能的探測週期太長,還有就是它只是探測TCP連線的存活,屬於比較斯文的做法,遇到惡意的連線時,保活功能就不夠使了。在長連線的應用場景下,client端一般不會主動關閉它們之間的連線,Client與server之間的連線如果一直不關閉的話,會存在一個問題,隨著客戶端連線越來越多,server早晚有扛不住的時候,這時候server端需要採取一些策略,如關閉一些長時間沒有讀寫事件發生的連線,這樣可 以避免一些惡意連線導致server端服務受損;如果條件再允許就可以以客戶端機器為顆粒度,限制每個客戶端的最大長連線數,這樣可以完全避免某個蛋疼的客戶端連累後端服務。
短連線對於伺服器來說管理較為簡單,存在的連線都是有用的連線,不需要額外的控制手段。但如果客戶請求頻繁,將在TCP的建立和關閉操作上浪費時間和頻寬。
      長連線和短連線的產生在於client和server採取的關閉策略,具體的應用場景採用具體的策略,沒有十全十美的選擇,只有合適的選擇。
5. 什麼時候用長連線,短連線?

        長連線多用於操作頻繁,點對點的通訊,而且連線數不能太多情況,。每個TCP連線都需要三步握手,這需要時間,如果每個操作都是先連線,再操作的話那麼處理速度會降低很多,所以每個操作完後都不斷開,次處理時直接傳送資料包就OK了,不用建立TCP連線。例如:資料庫的連線用長連線, 如果用短連線頻繁的通訊會造成socket錯誤,而且頻繁的socket 建立也是對資源的浪費。 
       而像WEB網站的http服務一般都用短連結,因為長連線對於服務端來說會耗費一定的資源,而像WEB網站這麼頻繁的成千上萬甚至上億客戶端的連線用短連線會更省一些資源,如果用長連線,而且同時有成千上萬的使用者,如果每個使用者都佔用一個連線的話,那可想而知吧。所以併發量大,但每個使用者無需頻繁操作情況下需用短連好。 
推送服務
維基百科:2 
      推送技術,又名反向AJAX,指的是一種基於Internet,將由中心或釋出者發出訊息傳輸給使用者的技術。與之相對的是拉取(參見AJAX),這種情況下請求是由使用者或客戶端主動發起的。

      當我們開發需要和伺服器互動的應用程式時,基本上都需要獲取伺服器端的資料,比如《地震應急通》就需要及時獲取伺服器上最新的地震資訊。要獲取伺服器上不定時更新的資訊,一般來說有兩種方法:第一種是客戶端使用Pull(拉)的方式,就是隔一段時間就去伺服器上獲取一下資訊,看是否有更新的資訊出現。第二種就是 伺服器使用Push(推送)的方式,當伺服器端有新資訊了,則把最新的資訊Push到客戶端上。這樣,客戶端就能自動的接收到訊息。 
雖然Pull和Push兩種方式都能實現獲取伺服器端更新資訊的功能,但是明顯來說Push方式比Pull方式更優越。因為Pull方式更費客戶端的網路流量,更主要的是費電量,還需要我們的程式不停地去監測服務端的變化。 
在開發
Android
和iPhone應用程式時,我們往往需要從伺服器不定的向手機客戶端即時推送各種通知訊息。我們只需要在Android或IPhone的通知欄處向下一拉,就展開了Notification Panel,可以集中一覽各種各樣通知訊息。目前iOS平臺上已經有了比較簡單的和完美的推送通知解決方案,可是Android平臺上實現起來卻相對比較麻煩。