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