Fork me on GitHub

其他技术---- 服务端推送SSE

SSEServer-sent Events的简称,它是HTML5中的一种规范。目前为止那些老旧的浏览器是不直接支持SSE规范的,比如IE内核的浏览器。
我们知道websocket可以实现客户端与服务端的双向通信。SSE这个东西是可以实现服务端主动向客户端进行通信的,但是它仅仅是单向的。如果客户端与服务器端的数据交互不是特别频繁,那么我们是可以使用SSE技术来实现的。

协议

Server-sent Events主要由两部分组成。

1.服务器端与浏览器端之间的通讯协议
2.前端js对象EventSource

服务端若要向前端发送一个SSE,响应的类型应该为"text/event-stream",响应文本的内容是一个事件流,当然还是文本类型,这个看响应类型就知道。
每个事件由类型和数据组成,同时每个事件都有一个标识符(键值对的形式),不同事件通过车符和换行符的空行(“\r\n”)来分隔。比如:

data: eve1 event
 
data: eve2 event
id: 0
 
event: eve
data: eve3 event
id: 1

含义:

  • data:数据
  • event: 事件的类型
  • id: 事件的标识符
  • retry: 浏览器在连接断开之后进行再次连接之前的等待时间

使用

  1. 我们使用sse编写一个push接口,用于返回SseEmitter对象,这样前端接口请求的响应头则会是text/event-stream
  2. SseEmitter对象真正响应给前端的事件是由SseEmitter对象的send方法来实现的(调用SseEmittersend方法将响应给前端一个事件流)
  3. 封装sendSseEmitter属性(事件内容)

代码详情见github
https://github.com/yusonghu/sse

posted @   Banana_Fish  阅读(380)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
点击右上角即可分享
微信分享提示