引入
- SSE。基于HTTP协议,由服务端向客户端单向实时推送数据的技术。
- 特点
- 单向通信。
- 实时推送。
- 轻量级。
- 支持跨域、使用简单、支持自动重连。
- 基于HTTP协议,现有服务器软件都支持。
内容
- 客户端API
- 建立基本SSE连接,使用EventSource。
- EventSource接口。Web内容与服务器发送事件通信的接口。
- 一个EventSource实例向HTTP服务器开启一个持久化连接,以text/event-stream格式发送事件,连接会一直保持开启直到通过调用EventSource.close关闭。
- 创建实例时,指定服务器地址。可以和当前网址同域,也可以跨域,可以指定第二个参数,打开withCredentials属性。
const initSSE = ()=>{
eventSource = new EventSource({服务器地址});
eventSource.onmessage = (event)=>{
console.log("收到消息内容是:", event.data)
};
eventSource.onerror = (error) => {
console.error("SSE 连接出错:", error);
eventSource.close();
};
};
* EventSource事件。
+ open。在与事件源的连接打开时触发。
+ message。在客户端从事件源接收到数据时触发。
+ error。在事件源连接未能打开时触发。
+ 具名事件。当从服务器端接收到指定event字段的事件时触发,会创建一个以该键值为值的特定事件。
- SSE连接携带token。
* event-source-polyfill。封装好的方法,可以直接配置请求头。
- 服务端API
- 数据格式
- 服务器向浏览器发送的SSE数据,要是UTF-8编码的文本。
Content-Type: text/event-stream
Cache-Control: no-cache
Connection: keep-alive
* 每次发送的信息是由若干个message组成,每个message之间用`\n\n`分隔。message内部由若干行组成,每一行格式是`[field]:value\n`。
- data字段
* 数据内容存放处。
- id字段
* 数据编号。
- event字段
* 自定义的事件类型,默认message事件。
参考资料