问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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

创作时间:
作者:
@小白创作中心

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

引用
CSDN
1.
https://blog.csdn.net/qq_36955155/article/details/138335559

SSE(Server-Sent Events)是一种基于HTTP协议的服务器推送技术,它允许服务器向客户端实时推送数据,广泛应用于即时通讯等场景。本文将详细介绍SSE的工作原理、使用方式及其在客户端和服务端的具体实现方法。

SSE技术简介

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
来发送SSE事件,可以更直接地利用WebFlux的异步和响应式特性。


© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号