[CowAPI] 29. SSE

준돌·2022년 7월 12일
0

오늘의 Cow

목록 보기
34/45

1. 문제

  • 대시보드를 구현하면서 너무 많은 응답을 받습니다.

2. 원인

  • Publish/Subscribe 패턴을 사용합니다.
  • Subscribe를 구분하지 못하여 응답을 지속적으로 보냈습니다.

3. 해결방법

  • Subscribe를 구분할 수 있도록 합니다.

4. 코드

// 1. Controller

@GetMapping("/dashboard")
public Flux<ServerSentEvent<DashboardResponseDto>> dashboard(HttpServletRequest request) {
    return dashboardService.publish(request);
}
// 1. Service
// id에 ip주소로 subscribe를 구분합니다.

public Flux<ServerSentEvent<DashboardResponseDto>> publish(HttpServletRequest request) {

    return Flux.interval(Duration.ofSeconds(refreshTime))
            .map(sequence -> ServerSentEvent.<DashboardResponseDto>builder()
                    .id(request.getHeader("X-FORWARDED-FOR"))
                    .event("dashboard")
                    .data(DashboardResponseDto.builder()
                            .todayUser(dashboardRedisService.getDashboard().getTodayUser())
                            .totalUser(dashboardRedisService.getDashboard().getTotalUser())
                            .updatedAt(Timestamp.valueOf(LocalDateTime.now(ZoneId.of("Asia/Seoul")).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))))
                            .aiList(aiPageService.aiListPage().toResponse())
                            .build())
                    .retry(Duration.ofSeconds(refreshTime))
                    .build());
}
profile
눈 내리는 겨울이 좋아!

0개의 댓글