实时通信之eventSource

半城伤御伤魂 提交于 2020-02-26 05:03:23

1、eventsource是一种单向通信的方式,只能由服务端向客户端推送消息,可以自动重连接,可以发送随机事件

2、event-source必须编码成utf-8的格式,消息的每个字段使用"\n"来做分割,并且需要下面4个规范定义好的字段:

  1. Event: 事件类型
  2. Data: 发送的数据
  3. ID: 每一条事件流的ID
  4. 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、缺点:

  1. 因为是服务器->客户端的,所以它不能处理客户端请求流
  2. 因为是明确指定用于传输UTF-8数据的,所以对于传输二进制流是低效率的,即使你转为base64的话,反而增加带宽的负载,得不偿失。

6、参考:

https://www.jianshu.com/p/3d7b0bbf435a

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!