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; }