SSE(Server-Sent Events) with Spring

SSE? -> SSE?

실시간으로 서버의 데이터를 stream하는 기술 - 지속적으로 데이터가 변경을 노출해야 할 경우 또는 유저에게 알림을 날릴 경우에 쓰이면 좋을 것으로 보인다.

기존에는 서버의 변경된 데이터를 가져오기 위해선 새로고침 or 폴링 등을 활용 할 수 있다.

뜬금없지만 브러우저별 web socket max limit limit of web socket?

sample with spring webflux kotlin

  1. Flux.interval
1
2
3
4
5
6
7
8
9
@RestController
class TestController {
@GetMapping(path = ["/test-sse"], produces = [MediaType.TEXT_EVENT_STREAM_VALUE])
fun testSse(): Flux<String>? {
return Flux.interval(Duration.ofSeconds(10))
.map { "data from server - " + LocalTime.now().toString() }
}

}

브라우저에서 http://localhost:8080/test-sse 호출

1
2
3
4
5
6
7
data:data from server - 20:30:09.938

data:data from server - 20:30:19.928

data:data from server - 20:30:29.929

data:data from server - 20:30:39.928

클라이언트에서 새로고침 또는 request를 날리지 않았지만 지속적으로 데이터가 들어옴을 확인 할수 있다. 아… 정말 빠르고 쉽다.