什么是WebSocket?
- WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。
- 在 WebSocket API中,浏览器和服务器只需要完成一次握手,两者就直接可以创建持久性的连接,并进行双向数据传输。
- websocket弥补了HTTP不支持长连接的特点。
了解双向通信
在WebSocket协议之前有三种实现双向通信的方式:轮询(polling)、长轮询(long-polling)和 iframe流(streaming)。
-
轮询:是客户端和服务器之间会一直进行连接,每隔一段时间就询问一次。而且每次发送请求都会有Http的Header,会很耗流量,也会消耗CPU的利用率。
-
长轮询:是对轮询的改进版,客户端发送HTTP给服务器之后,看有没有新消息,如果没有新消息,就一直等待。当有新消息的时候,才会返回给客户端。- 优点:比 Polling 做了优化,有较好的时效性;
-
iframe流:方式是在页面中插入一个隐藏的iframe,利用其src属性在服务器和客户端之间创建一条长连接,服务器向iframe传输数据(通常是HTML,内有负责插入信息的javascript),来实时更新页面。
双向通信的优缺点
通信方式 | 优点 | 缺点 |
---|---|---|
轮询 | 实现简单, 无需做过多的更改 |
轮询的间隔过长,会导致用户不能及时接收到更新的数据; 轮询的间隔过短,会导致查询请求过多,增加服务器端的负担 |
长轮询 | 比轮询做了优化,有较好的时效性 | 保持连接会消耗资源;服务器没有返回有效数据,程序超时 |
iframe流 | 消息能够实时到达;浏览器兼容好 | 服务器维护一个长连接会增加开销;IE、chrome、Fire |