Server Sent Event Spring Webflux return rest controller 响应的事件名称
Server Sent Event Spring Webflux return event name in response from rest controller
我将 SSE 与 reactor Flux 一起使用以捕获 linux 系统指标并发布到浏览器(javascript 事件源)。
目前,问题是无法将特定数据发送到特定客户端。在浏览了多个 SO 帖子后,它被告知在事件源中使用事件侦听器,并且来自服务器的响应应该将 event 作为响应中的键。
因为,我正在 return 从服务器发送一个对象,将 事件 作为响应中的关键之一就足够了吗 json将由事件源标识。
在客户端设置一个唯一编号,在 json 响应的 事件 键中将是 return。
感谢您的帮助!
Javascript:
jsonStreamObjectHeap.addEventListener("197e08e-f9a4-4e6e-9a04-220ade08a8f4",function(e){
$.each(message, function(index, value) {
/*some operation*/
});
}
来自其余控制器的响应:
{
"event":"197e08e-f9a4-4e6e-9a04-220ade08a8f4",
"data":"2048"
}
休息控制器代码:
Flux<Long> interval = Flux.interval(Duration.ofSeconds(1));
interval.subscribe((i) -> testStreamList.forEach(testStream -> {
try {
generateTestStream(testStream, UUID);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}));
Flux<List<TestStream>> transactionFlux = Flux.fromStream(Stream.generate(() -> testStreamList));
return Flux.zip(interval, transactionFlux).map(Tuple2::getT2);
我发现 org.springframework.http.codec.ServerSentEvent
可以从其余控制器插入您的 Flux 响应。
Flux<Long> interval = Flux.interval(Duration.ofSeconds(1));
Flux<HeapStat> transactionFlux = Flux.fromStream(Stream.generate(() -> heapStat));
/*Bulding ServerSentEvent to from the tuple*/
return Flux.zip(interval, transactionFlux).map(tuple->
ServerSentEvent.<HeapStat>builder().event(jsessionId).data(tuple.getT2()).build()
);
您可以像 SSEEmmiter
使用自定义事件名称、Last-Event-ID
一样准备响应
我将 SSE 与 reactor Flux 一起使用以捕获 linux 系统指标并发布到浏览器(javascript 事件源)。
目前,问题是无法将特定数据发送到特定客户端。在浏览了多个 SO 帖子后,它被告知在事件源中使用事件侦听器,并且来自服务器的响应应该将 event 作为响应中的键。
因为,我正在 return 从服务器发送一个对象,将 事件 作为响应中的关键之一就足够了吗 json将由事件源标识。
在客户端设置一个唯一编号,在 json 响应的 事件 键中将是 return。
感谢您的帮助!
Javascript:
jsonStreamObjectHeap.addEventListener("197e08e-f9a4-4e6e-9a04-220ade08a8f4",function(e){
$.each(message, function(index, value) {
/*some operation*/
});
}
来自其余控制器的响应:
{
"event":"197e08e-f9a4-4e6e-9a04-220ade08a8f4",
"data":"2048"
}
休息控制器代码:
Flux<Long> interval = Flux.interval(Duration.ofSeconds(1));
interval.subscribe((i) -> testStreamList.forEach(testStream -> {
try {
generateTestStream(testStream, UUID);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}));
Flux<List<TestStream>> transactionFlux = Flux.fromStream(Stream.generate(() -> testStreamList));
return Flux.zip(interval, transactionFlux).map(Tuple2::getT2);
我发现 org.springframework.http.codec.ServerSentEvent
可以从其余控制器插入您的 Flux 响应。
Flux<Long> interval = Flux.interval(Duration.ofSeconds(1));
Flux<HeapStat> transactionFlux = Flux.fromStream(Stream.generate(() -> heapStat));
/*Bulding ServerSentEvent to from the tuple*/
return Flux.zip(interval, transactionFlux).map(tuple->
ServerSentEvent.<HeapStat>builder().event(jsessionId).data(tuple.getT2()).build()
);
您可以像 SSEEmmiter
使用自定义事件名称、Last-Event-ID