Socket:在各個領域有不同的概念凤瘦,其中操作系統(tǒng)中是進程間通信的工具宿礁,網(wǎng)絡傳輸中是封裝傳輸層協(xié)議的一種技術,本身是為了方便使用者使用TCP/UDP協(xié)議進行網(wǎng)絡通信的蔬芥,所以Socket不僅支持TCP而且支持UDP
WebSocket:是建立在TCP協(xié)議之上的梆靖,作為HTTP協(xié)議的補充控汉;首先我們要了解HTTP協(xié)議是一種無狀態(tài)的協(xié)議,而且1.0是只支持短連接的(一次連接只能有一次request-response)返吻,1.1后支持長連接(頭部將入keep-alive姑子,但是這種通信過程任然建立在poll之上,服務器被動傳輸數(shù)據(jù)思喊,推送成本很高)所以為了彌補這種缺陷壁酬,WebSocket支持雙向通信(本身HTTP和WebSocket都是建立在TCP協(xié)議之上的)
WebSocket實現(xiàn)長連接方式:
1、HTTP協(xié)議升級(需要客戶端支持)
2恨课、http請求建立連接--應答狀態(tài)為101
3舆乔、WebSocket-雙向通信(TCP通信)
4、WebSocket-斷開連接
所以可以看出WebSocket和Socket本身沒有什么關系剂公,但是在TCP實現(xiàn)長連接的思路是是一致的希俩,都需要3次握手和4次揮手,都需要維持心跳包(Ping纲辽、pong)
心跳包作用:
雖然說建立了長連接颜武,但是網(wǎng)絡不穩(wěn)定是必然會發(fā)生的事情,還有防火墻的隔離都會導致通信中斷拖吼,那么如何保證兩端在發(fā)送數(shù)據(jù)的時候是保持著連接的呢鳞上,這就需要每隔一段時間進行一次無數(shù)據(jù)的空包傳輸,用于探測是否連接中斷吊档,如果中斷篙议,需要重新建立連接。
影響網(wǎng)絡因素:
防火墻怠硼,網(wǎng)關鬼贱,網(wǎng)絡波動,而對于移動手機來說當手機接入網(wǎng)絡時香璃,其實進入的是局域網(wǎng)这难,所以ip是隨機的,如果是接入電信局的網(wǎng)絡葡秒,那么為了保證通信姻乓,減少路由壓力,他會對路由表進行不定期刪除同云,那么手機之前的連接就沒有啦糖权,如果需要發(fā)送數(shù)據(jù),就必須重新建立連接炸站,這也是移動通信的巨大開銷詬病的來源星澳。
所有文章個人理解,如有紕漏旱易,請大佬指點