Socket:在各個(gè)領(lǐng)域有不同的概念,其中操作系統(tǒng)中是進(jìn)程間通信的工具,網(wǎng)絡(luò)傳輸中是封裝傳輸層協(xié)議的一種技術(shù),本身是為了方便使用者使用TCP/UDP協(xié)議進(jìn)行網(wǎng)絡(luò)通信的,所以Socket不僅支持TCP而且支持UDP
WebSocket:是建立在TCP協(xié)議之上的,作為HTTP協(xié)議的補(bǔ)充;首先我們要了解HTTP協(xié)議是一種無狀態(tài)的協(xié)議,而且1.0是只支持短連接的(一次連接只能有一次request-response),1.1后支持長(zhǎng)連接(頭部將入keep-alive,但是這種通信過程任然建立在poll之上,服務(wù)器被動(dòng)傳輸數(shù)據(jù),推送成本很高)所以為了彌補(bǔ)這種缺陷,WebSocket支持雙向通信(本身HTTP和WebSocket都是建立在TCP協(xié)議之上的)
WebSocket實(shí)現(xiàn)長(zhǎng)連接方式:
1、HTTP協(xié)議升級(jí)(需要客戶端支持)
2、http請(qǐng)求建立連接--應(yīng)答狀態(tài)為101
3、WebSocket-雙向通信(TCP通信)
4、WebSocket-斷開連接
所以可以看出WebSocket和Socket本身沒有什么關(guān)系,但是在TCP實(shí)現(xiàn)長(zhǎng)連接的思路是是一致的,都需要3次握手和4次揮手,都需要維持心跳包(Ping、pong)
心跳包作用:
雖然說建立了長(zhǎng)連接,但是網(wǎng)絡(luò)不穩(wěn)定是必然會(huì)發(fā)生的事情,還有防火墻的隔離都會(huì)導(dǎo)致通信中斷,那么如何保證兩端在發(fā)送數(shù)據(jù)的時(shí)候是保持著連接的呢,這就需要每隔一段時(shí)間進(jìn)行一次無數(shù)據(jù)的空包傳輸,用于探測(cè)是否連接中斷,如果中斷,需要重新建立連接。
影響網(wǎng)絡(luò)因素:
防火墻,網(wǎng)關(guān),網(wǎng)絡(luò)波動(dòng),而對(duì)于移動(dòng)手機(jī)來說當(dāng)手機(jī)接入網(wǎng)絡(luò)時(shí),其實(shí)進(jìn)入的是局域網(wǎng),所以ip是隨機(jī)的,如果是接入電信局的網(wǎng)絡(luò),那么為了保證通信,減少路由壓力,他會(huì)對(duì)路由表進(jìn)行不定期刪除,那么手機(jī)之前的連接就沒有啦,如果需要發(fā)送數(shù)據(jù),就必須重新建立連接,這也是移動(dòng)通信的巨大開銷詬病的來源。
所有文章個(gè)人理解,如有紕漏,請(qǐng)大佬指點(diǎn)