1. 程式人生 > >Android網路程式設計之socket和http程式設計的區別

Android網路程式設計之socket和http程式設計的區別

HTTP為短連線

        Http協議是建立在TCP協議之上的一種應用。它與TCP連線不同之處在於,客戶端每次請求都需要伺服器返回響應,在請求結束後,會主動釋放連線,從建立連線到關閉連線的過程稱為“一次連線”。由於HTTP每次請求都會釋放連線,因為HTTP連線是一種“短連線”,所以要保持客戶端線上狀態,就必須不停地向伺服器發起連線請求。所以在開發過程中,即使不需要獲得任何資料,客戶端也要保持每隔一段時間向伺服器傳送一次請求,以保證通訊的正常。網路應用程式的開發有很多的架構和模式,常見的有C/S、B/S等,而Http協議是基於B/S模式的,有WEB瀏覽器和WEB伺服器構成。

1)在HTTP 1.0中,客戶端的每次請求都要求建立一次單獨的連線,在處理完本次請求後,就自動釋放連線。

2)在HTTP 1.1中則可以在一次連線中處理多個請求,並且多個請求可以重疊進行,不需要等待一個請求結束後再發送下一個請求。

       由於HTTP在每次請求結束後都會主動釋放連線,因此HTTP連線是一種“短連線”,要保持客戶端程式的線上狀態,需要不斷地向伺服器發起連線請求。通常的做法是即時不需要獲得任何資料,客戶端也保持每隔一段固定的時間向伺服器傳送一次“保持連線”的請求,伺服器在收到該請求後對客戶端進行回覆,表明知道客戶端“線上”。若伺服器長時間無法收到客戶端的請求,則認為客戶端“下線”,若客戶端長時間無法收到伺服器的回覆,則認為網路已經斷開。

Socket 為長連線

       Socket 是對 TCP/IP 協議的封裝,Socket 只是個介面不是協議,通過 Socket 我們才能使用 TCP/IP 協議,除了 TCP,也可以使用 UDP 協議來傳遞資料。

        建立 Socket 連線的時候,可以指定傳輸層協議,可以是 TCP 或者 UDP,當用 TCP 連線,該Socket就是個TCP連線,反之。

        Socket主要就是用於進行傳統的C/S模式應用的開發,主要有服務端和客戶端構成。Socket 連線,至少需要一對套接字,分為 clientSocket,serverSocket 連線分為3個步驟:

(1) 伺服器監聽:伺服器並不定位具體客戶端的套接字,而是時刻處於監聽狀態;

(2) 客戶端請求:客戶端的套接字要描述它要連線的伺服器的套接字,提供地址和埠號,然後向伺服器套接字提出連線請求;

(3) 連線確認:當伺服器套接字收到客戶端套接字發來的請求後,就響應客戶端套接字的請求,並建立一個新的執行緒,把伺服器端的套接字的描述發給客戶端。一旦客戶端確認了此描述,就正式建立連線。而伺服器套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連線請求。

        通常情況下Socket 連線就是 TCP 連線,因此 Socket 連線一旦建立,通訊雙方開始互發資料內容,直到雙方斷開連線。在實際應用中,由於網路節點過多,在傳輸過程中,會被節點斷開連線,因此要通過輪詢高速網路,該節點處於活躍狀態。

總結       

       很多情況下,都是需要伺服器端向客戶端主動推送資料,保持客戶端與服務端的實時同步。若雙方是 Socket 連線,可以由伺服器直接向客戶端傳送資料;若雙方是 HTTP 連線,則伺服器需要等客戶端傳送請求後,才能將資料回傳給客戶端。因此,客戶端定時向伺服器端傳送請求,不僅可以保持線上,同時也詢問伺服器是否有新資料,如果有就將資料傳給客戶端。