实时推送技术
- 实时推送技术的实现大体有两种方式,
Ajax轮询
和WebSocket
- Ajax轮询 是通过设定特定的时间间隔(如:1s), 定时向服务器发送HTTP请求,从而获取数据,达到实时推送的效果。这种传统的形式有明显的缺点,就是客户端需要不断地向服务端发送请求,增加服务器压力
- WebSocket 协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯
ws握手与数据传输 图片来源:菜鸟教程
简单介绍
HTML5 标准
- HTML5 新增的协议
单个 TCP 连接
- 在单个 TCP 连接上进行全双工(能够同一时候发送和接收)通讯的协议
基于HTTP进行链接
- Webscoket 并不是全新的协议,而是利用了 HTTP 协议来建立连接(完成握手)
- 一次握手,永久连接,双向数据传输
- 通过查看浏览器的request这是一个以HTTP协议为基础的get请求,握手只会进行一次,随后便可以进行双向数据传递
不存在跨域的问题
webscoket
协议本身不要求同源策略,不存在跨域的问题,本身就跨域。- 但是,浏览器会发送 Origin 的 HTTP头 给服务器,服务器可以根据 Origin 拒绝这个 WebSocket 请求。所以,是否要求同源要看服务器端如何检查。
统一资源标识符
ws
和wss
- 按照HTML5标准是有对应关系的
HTTP -> ws; HTTPS -> wss
心跳检测
- 链接时间长无数据来往会自动断线,浏览器不