转载:https://mp.weixin.qq.com/s/FSWVR2iYrsM0-vxXD9m5RA
- HTTP协议
HTTP协议为web客户端和服务器之间交互的基于文本的应用级协议。HTTP协议有一个缺陷:通信只能由客户端发起,做不到服务器主动推送数据给客户端。这种单项请求的特点,这种单向请求的特点注定了如果服务器有连续的状态变化,客户端获知会非常麻烦。
在webSocket协议之前,有三种实现双向通信的方式:轮询(polling)、长轮询(long-polling)、和iframe流(streaming)。
1、轮询(polling)
轮询是在特定的时间间隔内(5s),由浏览器发送请求到服务器,服务器将最新内容返回给客户端。
优点:实现简单,无需做过多更改。
缺点:
1、浏览器需要频繁地向服务器发送请求,http请求可能包含很长的头部,真正有用的是其中一小部分,会很浪费带宽资源;
2、轮询时间过长,会导致客户端不能及时收到最新内容;
3、轮询时间过短,导致服务器查询请求过多,增加服务器负担;
比较新的技术去做轮询的是Comet,它是基于HTTP长连接的“服务器推”技术,与传统轮询的不同之处在于,服务器会阻塞请求直到有新数据或超时才返回。Comet包括基于AJAX的长轮询(long-polling)和iframe流(streaming)。
2、长轮询(long-polling)
长轮询是对轮询的改进版,客户端发送请求给服务器,服务器会判断是否有新数据,如果有新数据就返回给客户端,客户端再次发送请求给服务器,如果没有新数据,服务器会一直等待直到有新数据或超时才返回。在某种程度上减少了网络带宽和cpu利用率的问题,但和轮询一样会有带宽和cpu浪费问题。
优点:比 Polling 做了优化,有较好的时效性
缺点:保持连接会消耗资源
3、iframe流(streaming)
iframe流方式是在页面上插入一个隐藏的iframe,利用src属性再服务器和客户端之前创建一个长连接,服务器向iframe传输数据(通常是html,内有插入信息的javascript),来实时更新页面。
优点:消息能够实时到达,浏览器兼容好;
缺点:服务器维护一个长连接会增加开销;IE、chrome、Fixfox会显示加载没有完成,图标会不停旋转。
4、webSocket
webSocket是一种在单个TCP连接上进行的全双工通信协议,允许服务器主动想客户端推送数据。在webSocket API中,浏览器和服务器只需要完成一次握手,两者直接就可以创建持久性连接,并进行双向数据传输。
优点:1、支持双向通信,实时性更强;
2、可以发送文本,也可以发送二进制数据;
3、减少通信量:只要建立起webSocket连接,就希望一直保持连接状态。和http相比,不但每次连接时的总开销减少,而且头部信息小,通信量也相应减少;
缺点:1、浏览器支持程度不一样
2、不支持断开重连