SSE推送技术

SSE推送技术
SSE(Server-Sent Events)是一种服务器向客户端推送数据的技术,其基于HTTP协议的长链接,这种推送实现开发难度低,快速上手。

优点:

1. 实时性:SSE能够实时向客户端推送数据,数据实时性高
.
2. 简单易用:SSE技术使用简单,只需要使用浏览器内置的EventSource对象即可监听服务器推送的数据,开发难度较低
.
3. 无需握手:与WebSockets等双向通信协议不同,SSE无需进行握手,减少数据传输的延迟

.
4, 完全无需引入第三方库,开发难度超级低,很方便
.
5,稳定性高:SSE连接相对于传统的Ajax轮询等技术,具有更高的稳定性,因为SSE是一种基于长连接的技术,可以避免频繁的网络IO操作和连接建立和断开的开销,从而减少网络传输的延迟和负担。

缺点:

1. 兼容性:由于SSE是比较新的技术,部分浏览器暂未支持,兼容性有所限制
.
2. 单向通信:与WebSockets等双向通信协议不同,SSE只能由服务器向客户端单向通信,无法由客户端主动向服务器发送数据。
.
3. 限制格式:SSE仅能传输文本格式的数据,无法传输二进制数据。

SSE的连接稳定性与网络环境、服务器性能、数据量等因素有关

SSE也存在一些连接不稳定的情况,例如网络丢包、网络拥塞、服务器性能瓶颈等问题,会导致SSE连接故障或断开。
此时,需要对SSE连接状态进行监控和处理,以及根据具体的业务需求和技术环境选择合适的重连策略,为了提高SSE连接的稳定性,可以采取以下措施:

重连机制 前端js中可以处理, onerror回调中设置合适的重连时间间隔和重连次数
优化网络环境 增加带宽、调整路由策略等方式,提高SSE连接的稳定性和速度
调整服务器性能 通过增加服务器资源、调整系统参数等方式(jvm内存空间、优化请求线程连接池大小等),提高SSE连接的稳定性和有效性

前端js中可以处理示例如下:

var source = new EventSource('/sse');
source.addEventListener('message', function(e) {
  console.log(e.data);
}, false);

SSE的后端使用很简单:

1,@GetMapping注解声明一个SSE事件流。-> produces = MediaType.TEXT_EVENT_STREAM_VALUE

@GetMapping(value = "/sse", produces = MediaType.TEXT_EVENT_STREAM_VALUE)

2,借助Spring WebFlux实现SSE流式推送消息 -> 返回值为Flux《String》
在pom.xml中引入相应的依赖

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-webfluxartifactId>
dependency>

Controllre层的方法上做处理即可,很简单,都不需要导入第三方库来实现

@GetMapping(value = "/compl/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> streamCompletions() {
  // 业务处理
}

总结:需要根据具体的业务需求和技术环境选择合适的推送技术,以保证数据传输的效率和稳定性。在无法确定业务场景和技术环境时,可以先进行测试和评估,选择合适的方案…

你可能感兴趣的:(JAVASE,网络,SSE,推送服务,WebFlux)