首先捋一下总的关系:Http协议和WebSocket协议都是创建在Tcp协议之上的应用层协议。浏览器
下面这张图能够表明Tcp的三次握手过程,以及它相较于UDP“可靠性保证”的由来。服务器
这就是一个比较完整的三次握手过程网络
为何不能改为两次握手?
有人会困惑为何要进行三次握手呢(两次确认)?这主要是为了防止已失效的请求链接报文突然又传送到了,从而产生错误。
假定A向B发送一个链接请求,因为一些缘由,致使A发出的链接请求在一个网络节点逗留了比较多的时间。此时A会将此链接请求做为无效处理 又从新向B发起了一次新的链接请求,B正常收到此链接请求后创建了链接,数据传输完成后释放了链接。若是此时A发出的第一次请求又到达了B,B会觉得A又发起了一次链接请求,若是是两次握手:此时链接就创建了,B会一直等待A发送数据,从而白白浪费B的资源。 若是是三次握手:因为A没有发起链接请求,也就不会理会B的链接响应,B没有收到A的确认链接,就会关闭掉本次链接。spa
HTTP协议使用的是请求-应答通讯模式,因此它也是无状态协议,数据传输完成后就断开链接,避免了资源的无效占用。基于TCP/IP协议“尽可能”保证数据的送达。同时header采用明文传输:这是一把双刃剑,在带给开发者便利的同时,也会致使相应的风险。blog
WebSocket 是一种双向通讯协议,在创建链接后,WebSocket 服务器和 Browser/Client Agent 都能主动的向对方发送或接收数据,就像 Socket 同样。WebSocket 须要相似 TCP 的客户端和服务器端经过握手链接,链接成功后才能相互通讯。资源
链接过程 —— 握手过程开发
HTTP 客户端与服务器的交互
WebSocket 请求响应客户端服务器交互
能够看到,相较于传统Http的请求应答模式,WebSocket 是相似 Socket 的 TCP 长链接的通信模式,一旦 WebSocket 链接创建后,后续数据都以帧序列的形式传输。在客户端断开 WebSocket 链接或 Server 端断掉链接前,不须要客户端和服务端从新发起链接请求。WebSocket能更好的节省服务器资源和带宽并达到实时通信,它创建在 TCP 之上,同 HTTP 同样经过 TCP 来传输数据。rem
WebSocket和 HTTP 最大不一样是:
HTTP协议是非持久化的,单向的网络协议,在创建链接后只容许浏览器向服务器发出请求后,服务器才能返回相应的数据。这样的方法最明显的缺点就是须要不断的发送请求,并且一般HTTP request的Header是很是长的,为了传输一个很小的数据 须要付出巨大的代价,是很不合算的,占用了不少的带宽。会致使过多没必要要的请求,浪费流量和服务器资源,每一次请求、应答,都浪费了必定流量在相同的头部信息上。
然而WebSocket的出现能够弥补这一缺点。在WebSocket中,只须要服务器和浏览器经过HTTP协议进行一个握手的动做,而后单独创建一条TCP的通讯通道进行数据的传送。
不一样点it
相同点class
联系
WebSocket在创建握手时,数据是经过HTTP传输的。可是创建以后,在真正传输时候是不须要HTTP协议的。