HTTP 和 Socket 的区别
要弄明白?http 和 socket?首先要熟悉網(wǎng)絡七層:物 數(shù) 網(wǎng) 傳 會 表 應,如圖1
如圖1
HTTP 協(xié)議:超文本傳輸協(xié)議,對應于應用層,用于如何封裝數(shù)據(jù).
TCP/UDP?協(xié)議:傳輸控制協(xié)議,對應于傳輸層,主要解決數(shù)據(jù)在網(wǎng)絡中的傳輸。
IP 協(xié)議:對應于網(wǎng)絡層,同樣解決數(shù)據(jù)在網(wǎng)絡中的傳輸。
傳輸數(shù)據(jù)的時候只使用 TCP/IP 協(xié)議(傳輸層),如果沒有應用層來識別數(shù)據(jù)內(nèi)容,傳輸后的協(xié)議都是無用的。
應用層協(xié)議很多 FTP,HTTP,TELNET等,可以自己定義應用層協(xié)議。
web 使用 HTTP 作傳輸層協(xié)議,以封裝 HTTP 文本信息,然后使用 TCP/IP 做傳輸層協(xié)議,將數(shù)據(jù)發(fā)送到網(wǎng)絡上。
?
一、HTTP 協(xié)議
http 為短連接:客戶端發(fā)送請求都需要服務器端回送響應.請求結(jié)束后,主動釋放鏈接,因此為短連接。通常的做法是,不需要任何數(shù)據(jù),也要保持每隔一段時間向服務器發(fā)送"保持連接"的請求。這樣可以保證客戶端在服務器端是"上線"狀態(tài)。
HTTP連接使用的是"請求-響應"方式,不僅在請求時建立連接,而且客戶端向服務器端請求后,服務器才返回數(shù)據(jù)。
?
二、Socket?連接
要想明白 Socket,必須要理解 TCP 連接。
TCP 三次握手:握手過程中并不傳輸數(shù)據(jù),在握手后服務器與客戶端才開始傳輸數(shù)據(jù),理想狀態(tài)下,TCP 連接一旦建立,在通訊雙方中的任何一方主動斷開連接之前 TCP 連接會一直保持下去。
Socket?是對 TCP/IP 協(xié)議的封裝,Socket 只是個接口不是協(xié)議,通過 Socket 我們才能使用 TCP/IP 協(xié)議,除了 TCP,也可以使用 UDP 協(xié)議來傳遞數(shù)據(jù)。
創(chuàng)建 Socket?連接的時候,可以指定傳輸層協(xié)議,可以是 TCP 或者 UDP,當用 TCP 連接,該Socket就是個TCP連接,反之。
Socket?原理
Socket?連接,至少需要一對套接字,分為 clientSocket,serverSocket 連接分為3個步驟:
(1) 服務器監(jiān)聽:服務器并不定位具體客戶端的套接字,而是時刻處于監(jiān)聽狀態(tài);
(2) 客戶端請求:客戶端的套接字要描述它要連接的服務器的套接字,提供地址和端口號,然后向服務器套接字提出連接請求;
(3) 連接確認:當服務器套接字收到客戶端套接字發(fā)來的請求后,就響應客戶端套接字的請求,并建立一個新的線程,把服務器端的套接字的描述發(fā)給客戶端。一旦客戶端確認了此描述,就正式建立連接。而服務器套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求.
Socket為長連接:通常情況下Socket 連接就是 TCP 連接,因此 Socket 連接一旦建立,通訊雙方開始互發(fā)數(shù)據(jù)內(nèi)容,直到雙方斷開連接。在實際應用中,由于網(wǎng)絡節(jié)點過多,在傳輸過程中,會被節(jié)點斷開連接,因此要通過輪詢高速網(wǎng)絡,該節(jié)點處于活躍狀態(tài)。
?
很多情況下,都是需要服務器端向客戶端主動推送數(shù)據(jù),保持客戶端與服務端的實時同步。
若雙方是 Socket 連接,可以由服務器直接向客戶端發(fā)送數(shù)據(jù)。
若雙方是 HTTP 連接,則服務器需要等客戶端發(fā)送請求后,才能將數(shù)據(jù)回傳給客戶端。
因此,客戶端定時向服務器端發(fā)送請求,不僅可以保持在線,同時也詢問服務器是否有新數(shù)據(jù),如果有就將數(shù)據(jù)傳給客戶端。
?
參考原文:http://www.cnblogs.com/xclidongbo/p/4032904.html?utm_source=tuicool&utm_medium=referral
?
總結(jié)
以上是生活随笔為你收集整理的HTTP 和 Socket 的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Javascript实现导航锚点滚动效果
- 下一篇: 《程序员跳槽全攻略》笔记