SSE(Server-Sent Events)功能介绍与使用方式

SSE(Server-Sent Events)是一种服务器推送技术,这种技术基于HTTP协议,利用HTTP的长连接特性,在客户端与服务器之间建立持久化连接,并通过该连接实现服务器向客户端的实时数据推送(应用于当前市面上的聊天语言模型,比如文心一言、chatgpt等)。SSE建立了一个从服务器到客户端的单向通道,服务器通过这个通道可以持续地向客户端发送事件流,而无需客户端进行显式的请求。服务器发送的事件流是由一系列的事件组成的,每个事件都以特定的格式呈现包含一个或多个字段,如事件的名称、数据内容和可选的ID。

SSE主要关注的是服务器与客户端之间的通信协议和机制,它定义了一个标准,不同的服务器和客户端有不同的实现方式。

客户端:

SSE的实现主要通过JavaScript的EventSource接口来完成。几乎所有的现代浏览器都支持EventSource接口,这使得SSE具有广泛的兼容性。客户端通过创建EventSource对象并指定服务器发送事件的URL来建立与服务器的连接。一旦连接建立,服务器就可以通过该连接向客户端发送实时更新。

但是,标准的EventSource API不支持POST请求和发送请求参数EventSource只支持通过GET方法连接到服务器,并且它不支持在连接时发送额外的请求头或请求体。这是因为SSE协议是基于HTTP的,而HTTP的服务器发送事件(Server-Sent Events)通常是通过GET请求建立的长期连接。可以使用sse.js,它是将EventSource 进行封装,可以支持POST请求和发送请求参数,具体的使用方式可以看官网,官网链接:官网链接

服务端:

开发人员可以使用各种编程语言和技术栈来实现SSE,这里主要讲Java开发人员如何实现SSE。

1.SseEmitter

使用SseEmitter来发送SSE事件,但是需要创建新线程来模拟异步发送SSE事件,推荐使用线程池,配置了线程池来发送SSE通常不会直接导致调用线程被阻塞,但这并不意味着整个过程中完全不存在阻塞操作的风险,所以更推荐的做法是使用WebFlux的响应式编程模型来直接发送SSE。

2.Spring WebFlux

使用Flux<ServerSentEvent>来发送SSE事件,可以更直接地利用WebFlux的异步和响应式特性。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值