要弄明白 http 和 socket 首先要熟悉網絡七層:物 數 網 傳 會 表 應,如圖1html
如圖1web
HTTP 協議:超文本傳輸協議,對應於應用層,用於如何封裝數據.服務器
TCP/UDP 協議:傳輸控制協議,對應於傳輸層,主要解決數據在網絡中的傳輸。網絡
IP 協議:對應於網絡層,一樣解決數據在網絡中的傳輸。socket
傳輸數據的時候只使用 TCP/IP 協議(傳輸層),若是沒有應用層來識別數據內容,傳輸後的協議都是無用的。post
應用層協議不少 FTP,HTTP,TELNET等,能夠本身定義應用層協議。ui
web 使用 HTTP 做傳輸層協議,以封裝 HTTP 文本信息,而後使用 TCP/IP 作傳輸層協議,將數據發送到網絡上。線程
1、HTTP 協議
http 爲短鏈接:客戶端發送請求都須要服務器端回送響應.請求結束後,主動釋放連接,所以爲短鏈接。一般的作法是,不須要任何數據,也要保持每隔一段時間向服務器發送"保持鏈接"的請求。這樣能夠保證客戶端在服務器端是"上線"狀態。server
HTTP鏈接使用的是"請求-響應"方式,不只在請求時創建鏈接,並且客戶端向服務器端請求後,服務器才返回數據。htm
2、Socket 鏈接
要想明白 Socket,必需要理解 TCP 鏈接。
TCP 三次握手:握手過程當中並不傳輸數據,在握手後服務器與客戶端纔開始傳輸數據,理想狀態下,TCP 鏈接一旦創建,在通信雙方中的任何一方主動斷開鏈接以前 TCP 鏈接會一直保持下去。
Socket 是對 TCP/IP 協議的封裝,Socket 只是個接口不是協議,經過 Socket 咱們才能使用 TCP/IP 協議,除了 TCP,也可使用 UDP 協議來傳遞數據。
建立 Socket 鏈接的時候,能夠指定傳輸層協議,能夠是 TCP 或者 UDP,當用 TCP 鏈接,該Socket就是個TCP鏈接,反之。
Socket 原理
Socket 鏈接,至少須要一對套接字,分爲 clientSocket,serverSocket 鏈接分爲3個步驟:
(1) 服務器監聽:服務器並不定位具體客戶端的套接字,而是時刻處於監聽狀態;
(2) 客戶端請求:客戶端的套接字要描述它要鏈接的服務器的套接字,提供地址和端口號,而後向服務器套接字提出鏈接請求;
(3) 鏈接確認:當服務器套接字收到客戶端套接字發來的請求後,就響應客戶端套接字的請求,並創建一個新的線程,把服務器端的套接字的描述發給客戶端。一旦客戶端確認了此描述,就正式創建鏈接。而服務器套接字繼續處於監聽狀態,繼續接收其餘客戶端套接字的鏈接請求.
Socket爲長鏈接:一般狀況下Socket 鏈接就是 TCP 鏈接,所以 Socket 鏈接一旦創建,通信雙方開始互發數據內容,直到雙方斷開鏈接。在實際應用中,因爲網絡節點過多,在傳輸過程當中,會被節點斷開鏈接,所以要經過輪詢高速網絡,該節點處於活躍狀態。
不少狀況下,都是須要服務器端向客戶端主動推送數據,保持客戶端與服務端的實時同步。
若雙方是 Socket 鏈接,能夠由服務器直接向客戶端發送數據。
若雙方是 HTTP 鏈接,則服務器須要等客戶端發送請求後,才能將數據回傳給客戶端。
所以,客戶端定時向服務器端發送請求,不只能夠保持在線,同時也詢問服務器是否有新數據,若是有就將數據傳給客戶端。
參考原文:http://www.cnblogs.com/xclidongbo/p/4032904.html?utm_source=tuicool&utm_medium=referral