Web端即时通信技术

概述
     以前限制web开发接近原生应用的一大障碍就是web开发很难实现即时通信。因为在web应用中,由于其使用的http协议的特殊性,只有用户在界面中进行操作后,服务器的到客户端的信息,才能进行响应。也就是说,使用web开发接近原生应用的一大障碍是服务器端不能主动向客户端发送信息。
     即时通信技术就是实现这样一种功能:服务器端可以即时地将数据的更新或变化反映到客户端。在web中,由于浏览器的限制,实现即时通信需要借助一些方法,这种限制出现的主要原因是:一般的web通信都是浏览器先发送请求到服务器,服务器再进行响应来完成数据的更新。

实现web端即时通信的方法
1. 短轮询
     短轮询的基本思路是浏览器每个一段时间向服务器发送http请求,服务器端在收到请求后,不论是否有数据更新,都直接进行响应。这种方式实现的即时通信在本质上还是浏览器发送请求,服务器接收请求的过程,通过让客户端不断地进行请求,模拟客户端实时收到服务端数据的变化。
     这种方法的缺点是由于需要不断地建立http连接,严重浪费服务端和客户端的资源,尤其是在客户端。因此,短轮询不适用于那些同时在线用户数量比较大并且很注重性能的web应用。

2. 长轮询(comet)
     长轮询指的是当服务器收到客户端发来的请求后不会直接进行响应,而是先将这个请求挂起,再判断服务器端数据是否有更新。如果有更新,就进行响应,如果一直没有数据更新,就在达到一定的时间限制(服务器端设置)后关闭连接。
     长轮询和短轮询比起来,明显减少了很多不必要的http请求次数,节约了资源。但是,连接的挂起会导致资源的浪费。

3. 长连接(SSE)
     SSE是HTML5新增的功能,全称为Server-Sent Events,它可以允许服务器推送数据到客户端。它也是基于http协议的,但是本质上与轮询不同,因为轮询需要客户端先发送请求。SSE最大的特点就是不需要客户端发送请求,只要服务端数据有更新,就可以马上发送到客户端。
     SSE的优势很明显,不需要建立或保持大量的客户端发往服务器端的请求,节约了很多资源,提升了应用的性能。

4. WebSocket
     WebSocket是HTML5定义的一个新协议,该协议可以实现服务器与客户端之间的双工通信。首先,需要在客户端和服务器端建立一个连接,这部分需要基于http,一旦建立连接,客户端和服务器端就处于平等地位,可以相互发送数据,不存在请求和响应的区别。缺点是服务器端的逻辑非常复杂。

比较
从兼容性角度考虑:
短轮询>长轮询>长连接>WebSocket
从性能方面考虑:
webSocket>长连接>长轮询>短轮询

Web端即时通信技术

上一篇:JS判断客户端是否为PC


下一篇:ajaxSetup