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是随机的,如果是接入电信局的网络,那么为了保证通信,减少路由压力,他会对路由表进行不定期删除,那么手机之前的连接就没有啦,如果需要发送数据,就必须重新建立连接,这也是移动通信的巨大开销诟病的来源。
所有文章个人理解,如有纰漏,请大佬指点