EventSource - 用于处理服务器发送的事件的 Web 内容接口

EventSource 接口是用于处理服务器发送的事件的 Web 内容接口。EventSource 实例打开与 HTTP 服务器的持久连接,服务器以 text/event-stream 格式发送事件。连接保持打开状态,直到调用 EventSource.close() 关闭。

打开连接后,来自服务器的传入消息将以 message 事件的形式传递给您的代码。

WebSockets 不同,服务器发送的事件是单向的; 也就是说,数据消息是从一个方向传递的,从服务器传送到客户端(例如用户的 Web 浏览器)。当没有必要以消息形式从客户端向服务器发送数据时,这使它们成为一个很好的选择。例如,EventSource 是处理诸如社交媒体状态更新,新闻源或将数据传递到客户端存储机制(如 IndexedDBWeb 存储)之类的有用方法。

构造函数

EventSource()

创建一个新的 EventSource 来处理从指定 URL 接收服务器发送的事件,可选择在凭证模式下处理。

属性

该接口还从其父级 EventTarget 继承了属性。

EventSource.readyState 只读

表示连接状态的数字。可能的值是 CONNECTING0),OPEN1)或 CLOSED2)。

EventSource.url 只读

一个 DOMString,表示源的 URL。

EventSource.withCredentials 只读

一个 Boolean,指示 EventSource 对象是否使用跨源(CORS)凭证集实例化,即 true,默认为不使用,即 false

事件处理程序

EventSource.onerror

在发生错误时调用的 EventHandler 并在 EventSource 对象上调度 error 事件。

EventSource.onmessage

在收到 message 事件时调用的 EventHandler,即当消息来自源时。

EventSource.onopen

在收到 open 事件时调用的 EventHandler,即刚刚打开连接时。

方法

该接口还从其父级 EventTarget 继承了方法。

EventSource.close()

关闭连接(如果有),并将 readyState 属性设置为 CLOSED 。如果连接已关闭,则该方法不执行任何操作。

实例

在这个基本示例中,创建了一个 EventSource 来接收来自服务器的事件; 一个名为 "sse.php" 的页面负责生成事件。

var evtSource = new EventSource('sse.php');
var eventList = document.querySelector('ul');

evtSource.onmessage = function(e) {
  var newElement = document.createElement("li");

  newElement.textContent = "message: " + e.data;
  eventList.appendChild(newElement);
}

每个收到的事件都会调用 EventSource 对象的 onmessage 事件处理程序。在处理程序中,它会创建一个新的 <li> 元素并将消息的数据写入其中,然后将新元素追加到文档中已有的列表元素中。

注意:你可以在 GitHub 上找到一个完整的例子 - 参见使用 PHP 的简单 SSE 演示。

规范

规范 状态 备注
HTML Living Standard
EventSource 的定义
现行的标准 -

桌面浏览器兼容性

特性 Chrome Edge Firefox Internet Explorer Opera Safari
基础支持 6 不支持 6 不支持 支持 5
Available in workers 支持 不支持 53 不支持 支持 支持
EventSource() constructor 9 不支持 6 不支持 11 5
close 6 不支持 6 不支持 支持 5
onerror 6 不支持 6 不支持 支持 5
onmessage 6 不支持 6 不支持 支持 5
onopen 6 不支持 6 不支持 支持 5
readyState 6 不支持 6 不支持 支持 5
url 6 不支持 6 不支持 支持 5
withCredentials 6 不支持 6 不支持 支持 5

移动浏览器兼容性

特性 Android Chrome for Android Edge mobile Firefox for Android IE mobile Opera Android iOS Safari
基础支持 支持 18 不支持 45 未知 12 5
Available in workers 支持 支持 不支持 53 未知 支持 支持
EventSource() constructor 支持 18 不支持 6 未知 11 5
close 支持 18 不支持 45 未知 12 5
onerror 支持 18 不支持 45 未知 12 5
onmessage 支持 18 不支持 45 未知 12 5
onopen 支持 18 不支持 45 未知 12 5
readyState 支持 18 不支持 45 未知 12 5
url 支持 18 不支持 45 未知 12 5
withCredentials 支持 18 不支持 45 未知 12 5

相关链接