背景:这里为了实现消息实时传输决定引入websocket协议。
不管是发送消息还是接收消息,都需要实时传输,张三发给李四,李四立马就能收到,基于HTTP实现是有些困难的。
但轮询方式也带来了一些问题
1、消耗更多系统资源:接收方在等待过程中需要频繁给服务器发起请求,大部分是空转的
2、获取到消息不够及时:需要等到下个请求周期才能拿到数据提高轮询频率,获取消息及时但系统资源消耗变多
降低轮询频率,系统资源消耗变少但获取消息不及时了
所以为了更好的解决上边的消息推送问题,我们引入websocket协议
一、概述
websocket是应用层协议,与http地位对等,都是基于传输层tcp协议实现的。
为了兼容现有设施,websocket协议使用与http协议相同端口,使用http upgrade机制实现websocket握手,当握手完成,通信双方可以按照websocket方式进行交互。
websocket中,通信双方数据传输的基本单元为帧,websocket 的帧 可以分为两类, 一类是用于传输控制信息的帧(如通知对方关闭 websocket 连接), 一类是用于传输应用数据的帧, 使用 websocket 协议通信的双方都需要首先进行握手, 只有当握手成功之后才开始使用 帧 传输数据。
二、握手过程
- 浏览器发起的HTTP请求中带有特殊的header:connection:upgrade upgrade:websocket
- 服务器返回带有特殊的header:connection:upgrade upgrade:websocket,特殊响应码:101
注意:websocket基于HTTP实现这种说法是错误的,HTTP相当于是websocket的“工具人”!
客户端通过HTTP发送协议升级的请求,服务器通过HTTP返回同意协议升级的响应,握手过程完成后,两者就不再通过HTTP通信,而是通过websocket通信了。