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.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
Controllre层的方法上做处理即可,很简单,都不需要导入第三方库来实现
@GetMapping(value = "/compl/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> streamCompletions() {
// 业务处理
}
总结:
需要根据具体的业务需求和技术环境选择合适的推送技术,以保证数据传输的效率和稳定性。在无法确定业务场景和技术环境时,可以先进行测试和评估,选择合适的方案…