1、Socket連接和Http連接的區(qū)別
簡單來說抒巢,瀏覽的網(wǎng)頁都是以http協(xié)議傳輸?shù)侥愕臑g覽器贫贝,而http是基于socket之上的。socket是一套完成tcp udp協(xié)議的接口蛉谜。
HTTP協(xié)議:簡單對象訪問協(xié)議稚晚,對應(yīng)于應(yīng)用層,HTTP協(xié)議是基于TCP連接的型诚。
? ? ? ? ? ? ? ? ? ? ?TCP協(xié)議:對應(yīng)于傳輸層
? ? ? ? ? ? ? ? ? ? ?IP協(xié)議: ? ?對應(yīng)于網(wǎng)絡(luò)層
TCP/IP協(xié)議是傳輸層協(xié)議客燕,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸;而HTTP是應(yīng)用層協(xié)議狰贯,主要解決如何包裝數(shù)據(jù)也搓。
Socket是對TCP/IP協(xié)議的封裝,Socket本身并不是協(xié)議暮现,而是一個調(diào)用接口(API)还绘,通過Socket,我們才能使用TCP/IP協(xié)議栖袋。
HTTP協(xié)議:http連接就是所謂的短連接拍顷,及客戶端向服務(wù)器端發(fā)送一次請求,服務(wù)器端響應(yīng)后連接即會斷掉塘幅。
Socket連接:socket連接就是所謂的長連接昔案,理論上客戶端和服務(wù)器端一旦建立起連接將不會主動斷開;但是由于各種環(huán)境因素可能會是連接斷開电媳,比如說:服務(wù)器端和客戶端主機down了踏揣,網(wǎng)絡(luò)故障,或者兩者之間長時間沒有數(shù)據(jù)傳輸匾乓,網(wǎng)絡(luò)防火墻可能會斷開該連接以釋放網(wǎng)絡(luò)資源捞稿,所以當一個socket連接中沒有數(shù)據(jù)的傳輸,那么為了維持連接需要發(fā)送心跳消息,具體心跳消息格式是開發(fā)者自己定義的娱局。
2彰亥、我們已經(jīng)知道網(wǎng)絡(luò)中的進程是通過socket來通信的,那么什么是socket衰齐?
socket起源于Unix.socket即是一種特殊的文件任斋,一些socket函數(shù)就是對其進行的操作(讀/寫IO、打開耻涛、關(guān)閉)废酷。我們在傳輸數(shù)據(jù)時,可以只使用(傳輸層)TCP/IP協(xié)議抹缕,但是那樣的話澈蟆,如果沒有應(yīng)用層,便無法識別數(shù)據(jù)內(nèi)容歉嗓,如果要是傳輸?shù)臄?shù)據(jù)有意義丰介,則必須使用到應(yīng)用層協(xié)議背蟆,應(yīng)用層協(xié)議有很多鉴分,比如HTTP\FTP\TELENT等,也可以自己定義應(yīng)用層協(xié)議带膀。WEB使用HTTPP協(xié)議作為應(yīng)用層協(xié)議志珍,以封裝HTTP文本信息,然后使用TCP/IP做傳輸層協(xié)議將它發(fā)到網(wǎng)絡(luò)上垛叨。
1)socket是一個針對TCP和UDP編程的接口伦糯,你可以借助它建立TCP連接等等。而TCP和UDP協(xié)議屬于傳輸層嗽元。而HTTP是個應(yīng)用層的協(xié)議敛纲,它實際上也建立在TCP協(xié)議上。(而HTTP是轎車剂癌,提供了封裝或者顯示數(shù)據(jù)的具體形式淤翔;Socket是發(fā)動機,提供了網(wǎng)絡(luò)通信的能力佩谷。)
2)socket是對TCP/IP協(xié)議的封裝旁壮,socket本身并不是協(xié)議,而是一個調(diào)用接口(API)谐檀,通過Socket抡谐,我們才能使用tcp、ip協(xié)議桐猬。Socket的出現(xiàn)只是使得程序員更方便地使用TCP/IP協(xié)議棧而已麦撵,是對TCP/IP協(xié)議的抽象,從而形成了我們知道的一些最基本的函數(shù)接口。
3免胃、利用Socket建立網(wǎng)絡(luò)連接的步驟
建立socket連接至少需要一對套接字五垮,其中一個運行客戶端,稱為ClientSocket杜秸,另一個運行與服務(wù)器端放仗,稱為ServerSocket.
套接字之間的連接過程分為三個步驟:服務(wù)監(jiān)聽,客戶端請求撬碟,連接確認诞挨。
1) 服務(wù)器監(jiān)聽:服務(wù)器套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài)呢蛤,實時監(jiān)控網(wǎng)絡(luò)狀態(tài)惶傻,等待客戶端的連接請求。
2) 客戶端請求:指客戶端的套接字提出連接請求其障,要連接的目標的服務(wù)器的套接字银室。為此,客戶端的套接字必須首先描述它要連接的的服務(wù)器的套接字励翼,指出服務(wù)器套接字的地址 和端口號蜈敢,然后就向服務(wù)器端套接字提出連接請求。
3)
連接確認:當服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求時汽抚,就響應(yīng)客戶端套接字的請求抓狭,建立一個新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端造烁,一旦客戶端確認了此描述否过,雙方就正式建立連接。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài)惭蟋,繼續(xù)接收其他客戶端套接字的連接請求苗桂。
4、HTTP協(xié)議詳解
HTTP是一個屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議告组,由于其簡捷煤伟,快速的方式,適用于分布式超媒體信息系統(tǒng)惹谐。目前在WWW中使用的是HTTP/1.0的第六版持偏,HTTP/1.1的規(guī)范化工作正在進行中。
http(超文本傳輸協(xié)議)是一個基于請求與響應(yīng)模式的氨肌、無狀態(tài)的鸿秆、應(yīng)用層的協(xié)議,吃跚簦基于TCP的連接方式卿叽,HTTP1.1版本中給出一種持續(xù)連接的機制桥胞,絕大多數(shù)Web開發(fā),都是構(gòu)建在HTTP協(xié)議之上的Web應(yīng)用考婴。
HTTP協(xié)議的主要特點可概括如下:
A 支持客戶贩虾、服務(wù)器模式
B 簡單快速:客戶向服務(wù)器請求服務(wù)時,只需傳送請求方法和路徑沥阱。請求方法常用的有GET/HEAD/POST缎罢。每種方法規(guī)定了客戶與服務(wù)器聯(lián)系的類型不同。由于HTTP協(xié)議簡單考杉,使得HTTP服務(wù)器的程序規(guī)模小策精,因而通信速度很快。
C 靈活:HTTP允許傳輸任意類型的數(shù)據(jù)對象崇棠。正在傳輸額類型由Content-Type加以標記咽袜。
D 無連接:無連接的含義是限制每次連接只處理一個請求。服務(wù)器處理完客戶的請求枕稀,并收到客戶的應(yīng)答后询刹,即斷開連接。采用這種方式可以節(jié)省傳輸時間萎坷。
E 無狀態(tài):HTTP協(xié)議是無狀態(tài)協(xié)議凹联。無狀態(tài)是指協(xié)議對于事務(wù)處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息食铐,則必須重傳匕垫,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方面虐呻,在服務(wù)器不需要先前信息時他的應(yīng)答就較快。