1、eventsource是一种单向通信的方式,只能由服务端向客户端推送消息,可以自动重连接,可以发送随机事件
2、event-source必须编码成utf-8的格式,消息的每个字段使用"\n"来做分割,并且需要下面4个规范定义好的字段:
- Event: 事件类型
- Data: 发送的数据
- ID: 每一条事件流的ID
- Retry: 告知浏览器在所有的连接丢失之后重新开启新的连接等待的时间,在自动重新连接的过程中,之前收到的最后一个事件流ID会被发送到服务端。
3、兼容性
4、实现方式:
客户端:
const es = new EventSource('/api')
es.onmessage = function(res){console.log(res)}
服务端:
const sseStream = new SseStream(req)
sseStream.pipe(res)
sseStream.write({
id: sendCount,
event: 'server-time',
retry: 20000, // 告诉客户端,如果断开连接后,20秒后再重试连接
data: {ts: new Date().toTimeString(), count: sendCount++}
})
5、缺点:
- 因为是服务器->客户端的,所以它不能处理客户端请求流
- 因为是明确指定用于传输UTF-8数据的,所以对于传输二进制流是低效率的,即使你转为base64的话,反而增加带宽的负载,得不偿失。
6、参考:
https://www.jianshu.com/p/3d7b0bbf435a
来源:oschina
链接:https://my.oschina.net/bing309/blog/3159020