webSocket
1.为什么会有webSocket的出现?
默认HTTP协议只支持请求响应模式,也就是常说的请求-响应模式,这样做可以简化Web服务器,减少服务器的负担,加快响应速度。这种机制对于信息变化不是特别频繁的应用尚能相安无事,但是对于那些实时要求比较高的应用来说,比如说在线游戏、在线证券、设备监控、新闻在线播报、RSS 订阅推送等等,当客户端浏览器准备呈现这些信息的时候,这些信息在服务器端可能已经过时了。所以我们需要一种服务端可以主动向客户端推送消息的技术,来保证消息的实时性。但是在webSocket出现之前,实时获取消息也是有几种解决方案的。
轮询:
轮询是比较常用并且简单的实现实时消息的方式,简单来说就是客户端不断向服务端请求数据,这个频率可能是一分钟甚至一秒一次,以此保持尽可能实时的获取最新数据。
以Ajax+轮询的方式,实现消息的获取
setInterval('send()', 1000);//轮询执行,1s一次
function send() {
$.ajax({
url : '../case/quatrzLoad.ajax',
type : 'post',
dataType : 'JSON',
async : false,
cache : false,
data : {},
success : function(result) {
if (result.success) {
//右下角消息提醒
bottomRight();
//声音提醒
playSound("../audio/remind.mp3");
}
}
});
}
轮询的方式适用于用户量比较少的应用,而且实现简单。但是频繁的请求会给服务器带来很大的压力。
长连接:
在页面里嵌入一个隐蔵iframe,将这个隐蔵iframe的src属性设为对一个长连接的请求或是采用xhr请求,服务器端就能源源不断地往客户端输入数据。 优点:消息即时到达,不发无用请求;管理起来也相对便。 缺点:服务器维护一个长连接会增加开销。
长轮询:
客户端向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。 优点:在无消息的情况下不会频繁的请求,耗费资小。 缺点:服务器hold连接会消耗资源,返回数据顺序无保证,难于管理维护。
2.webSocket是什么?
WebSocket同样是HTML 5规范的组成部分之一。WebSocket 相较于上述几种连接方式,实现原理较为复杂,用一句话概括就是:客户端向 WebSocket 服务器通知(notify)一个带有所有 接收者ID(recipients IDs)的事件(event),服务器接收后立即通知所有活跃的(active)客户端,只有ID在接收者ID序列中的客户端才会处理这个事件。由于 WebSocket 本身是基于TCP协议的,所以在服务器端我们可以采用构建 TCP Socket 服务器的方式来构建 WebSocket