Socket實現(xiàn)服務(wù)器與客戶端之間的物理連接掉蔬,并進行數(shù)據(jù)傳輸廊宪。主要有TCP/UDP兩個協(xié)議。Socket處于網(wǎng)絡(luò)協(xié)議的傳輸層女轿。
socket的一個特點是他可以是"長鏈接",也就是說除非雙方主動斷開,否則,他不會自動斷開.這個特點非常的好,很多應(yīng)用都會需要長鏈接,不過缺點是他太博愛了,來者不拒,而且還不好檢查,所以,為了保持服務(wù)器資源的最大利用率,通常我們會要求雙方通過定時的心跳方式來確認(rèn)長鏈接的有效性.只要心跳不存在,服務(wù)器就可以及時剔除掉這些死鏈接.
心跳機制是TCP在一段時間間隔后發(fā)送確定連接端是否還存在箭启,如果存在的話就會回傳一個包確定網(wǎng)絡(luò)有效,如果心跳包有問題蛉迹,則通知上層應(yīng)用當(dāng)前網(wǎng)絡(luò)有問題了傅寡。
TCP:傳輸控制協(xié)議,面向連接的的協(xié)議北救,穩(wěn)定可靠荐操。當(dāng)客戶和服務(wù)器彼此交換數(shù)據(jù)前,必須先在雙方之間建立一個TCP連接珍策,之后才能傳輸數(shù)據(jù)淀零。
tcp協(xié)議有一個特點就是三次握手:
第一次
第一次握手:建立連接時,客戶端發(fā)送syn包(syn=j)到服務(wù)器膛壹,并進入SYN_SENT狀態(tài),等待服務(wù)器確認(rèn);SYN:同步序列編號(Synchronize Sequence Numbers)模聋。
第二次
第二次握手:服務(wù)器收到syn包肩民,必須確認(rèn)客戶的SYN(ack=j+1),同時自己也發(fā)送一個SYN包(syn=k)链方,即SYN+ACK包持痰,此時服務(wù)器進入SYN_RECV狀態(tài);
第三次
第三次握手:客戶端收到服務(wù)器的SYN+ACK包祟蚀,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1)工窍,此包發(fā)送完畢,客戶端和服務(wù)器進入ESTABLISHED(TCP連接成功)狀態(tài)前酿,完成三次握手患雏。
完成三次握手,客戶端與服務(wù)器開始傳送數(shù)據(jù)罢维,
UDP:廣播式數(shù)據(jù)傳輸淹仑,UDP不提供可靠性,它只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報發(fā)送出去肺孵,但是并不能保證它們能到達目的地匀借。由于UDP在傳輸數(shù)據(jù)報前不用在客戶和服務(wù)器之間建立一個連接,且沒有超時重發(fā)等機制平窘,故而傳輸速度很快吓肋。
優(yōu)點:
1.傳輸數(shù)據(jù)為字節(jié)級,傳輸數(shù)據(jù)可自定義瑰艘,數(shù)據(jù)量小是鬼。相應(yīng)的移動端開發(fā),手機費用低
2.傳輸數(shù)據(jù)時間短磅叛,性能高
3.適合C/S之間信息實時交互
4.可以加密屑咳,數(shù)據(jù)安全性高
缺點:?
1.需要對傳輸?shù)臄?shù)據(jù)進行解析,轉(zhuǎn)化為應(yīng)用級的數(shù)據(jù)
2.對開發(fā)人員的開發(fā)水平要求高
3.相對于Http協(xié)議傳輸弊琴,增加了開發(fā)量
http全文是超文本傳輸協(xié)議,是一種萬維網(wǎng)常用的協(xié)議,它是TCP協(xié)議的一種典型上的應(yīng)用,Http請求主要有http協(xié)議兆龙,基于http協(xié)議的soap協(xié)議,常見的http數(shù)據(jù)請求方式有g(shù)et和post敲董,web服務(wù)
優(yōu)點:
1.基于應(yīng)用級的接口使用方便
2.要求的開發(fā)水平不高紫皇,容錯性強
缺點:?
1.傳輸速度慢,數(shù)據(jù)包大腋寨。
2.如實現(xiàn)實時交互聪铺,服務(wù)器性能壓力大
3.數(shù)據(jù)傳輸安全性差
HTTP協(xié)議:簡單對象訪問協(xié)議,對應(yīng)于應(yīng)用層??萄窜,HTTP協(xié)議是基于TCP連接的
tcp協(xié)議:??? 對應(yīng)于傳輸層
ip協(xié)議:???? 對應(yīng)于網(wǎng)絡(luò)層
TCP/IP是傳輸層協(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連接:http連接就是所謂的短連接现诀,即客戶端向服務(wù)器端發(fā)送一次請求夷磕,服務(wù)器端響應(yīng)后連接即會斷掉;
socket連接:socket連接就是所謂的長連接仔沿,理論上客戶端和服務(wù)器端一旦建立起連接將不會主動斷掉坐桩;但是由于各種環(huán)境因素可能會是連接斷開,比如說:服務(wù)器端或客戶端主機down了于未,網(wǎng)絡(luò)故障撕攒,或者兩者之間長時間沒有數(shù)據(jù)傳輸,網(wǎng)絡(luò)防火墻可能會斷開該連接以釋放網(wǎng)絡(luò)資源烘浦。所以當(dāng)一個socket連接中沒有數(shù)據(jù)的傳輸抖坪,那么為了維持連接需要發(fā)送心跳消息~~具體心跳消息格式是開發(fā)者自己定義的
Socket適用場景:網(wǎng)絡(luò)游戲,銀行交互闷叉,支付擦俐。
http適用場景:公司OA服務(wù),互聯(lián)網(wǎng)服務(wù)握侧。