HTML5有一个Server-Sent Events(SSE)功能,允许服务端推送数据到客户端,通常叫数据推送。当数据源有新数据,它马上发送到客户端,不需要再等待客户端请求。
Server-Sent Events与Web Socket:
相同点:作用相似,都是建立浏览器与服务器之间的通信渠道,然后服务器向浏览器推送消息。
区别:总体来说,Web Socket更强大和灵活。Web Socket是全双工通道,可以双向通信,SSE是单向通道,只能服务器向浏览器发送;Web Socket是一个独立协议,SSE使用HTTP协议,现有的服务器软件都支持;Web Socket协议相对复杂,SSE属于轻量级,使用简单;SSE默认支持断线重连,Web Socket需要自己实现;SSE一般只用来传送文本,二进制数据需要编码后传送,Web Socket默认支持传送二进制数据。
判断浏览器是否支持Server-Sent:
if(typeof(EventSource)!=="undefined"){
// 浏览器支持 Server-Sent
}else{
// 浏览器不支持 Server-Sent..
}
EventSource对象:
EventSource对象用于接收服务器发送的事件通知。
//创建一个新的EventSource对象,规定发送更新的页面的URL
var source=new EventSource(url);
EventSource对象的事件:
- open:通往服务器的连接打开时触发;
- message:接收到消息时触发;
- error:发生错误时触发;
var source=new EventSource("demo_sse.php");
source.onmessage=function(event){
document.getElementById("result").innerHTML+=event.data;
};