HTML5 事件推送Server-Sent Events

HTML5 服务器发送事件(Server-Sent Events)

服务器发送事件(Server-sent Events)是基于 WebSocket 协议的一种服务器向客户端发送事件和数据的单向通讯。

HTML5 服务器发送事件(server-sent event)允许网页获得来自服务器的更新。

Server-Sent 事件 - 单向消息传递

Server-Sent 事件指的是网页自动获取来自服务器的更新。

浏览器支持

所有主流浏览器均支持服务器发送事件,除了 Internet Explorer。

检测 Server-Sent 事件支持

if(typeof(EventSource)!=="undefined"){
   // 浏览器支持 Server-Sent
   // 一些代码.....
}else{
   // 浏览器不支持 Server-Sent..
}

Server-Sent 事件使用

1. 创建一个eventSource对象

var eventSource = new EventSource("/eventsource");//这是一个后端的接口地址或者处理文件地址

括号参数:一个后端的接口地址 或者 处理文件的地址

2. eventSource对象的事件

接收 Server-Sent 事件通知

EventSource 对象用于接收服务器发送事件通知:

事件 描述
onopen 当通往服务器的连接被打开
onmessage 当接收到消息
onerror 当发生错误
var source=new EventSource("demo_sse.php");    //创建一个新的eventSource对象,规定发送至更新的页面的URL
source.onmessage=function(event){    //每接受到一次更新时,就会发生onmessage事件
  document.getElementById("result").innerHTML+=event.data + "<br>";//当onmessage事件发生时,把已接受的数据推入元素中
};

3. 接受数据 事件对象的data属性 event.data

es.onmessage = function(e) {
    console.log(e.data);
}

后端配置

1. 把报头 "Content-Type" 设置为 "text/event-stream"

2. 后端返回的信息必须以data:开头,并且以\n\n结尾,两者之间的内容就是前端得到的内容

1// 配置事件推送路由
2if(pathname === "/eventsource") {
3	// 返回头必须是text/event-stream;
4	res.setHeader("content-type", "text/event-stream;charset=utf-8");
5	// 后端返回的信息必须以data: 开头 并且以\n\n结尾
6	res.end("data:张三\n\n");
7	return;
}





猜你喜欢

转载自blog.csdn.net/thunderevil35/article/details/80656900