Skip to content

Commit 0e1a641

Browse files
authored
Merge pull request #218 from prgrms-web-devcourse-final-project/fix/SSE-connection
fix: SSE connection 문제 해결
2 parents 5567586 + 20f2409 commit 0e1a641

File tree

2 files changed

+16
-24
lines changed

2 files changed

+16
-24
lines changed

src/main/java/devut/buzzerbidder/domain/notification/service/SseEmitterPool.java

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,11 @@ public SseEmitter subscribe(String channel) {
3838
emitter.onError((e) -> removeEmitter(channel, emitter));
3939

4040
try {
41-
emitter.send(SseEmitter.event().comment("connected"));
41+
emitter.send(
42+
SseEmitter.event()
43+
.name("connect")
44+
.data("connected")
45+
);
4246
} catch (IOException e) {
4347
removeEmitter(channel, emitter);
4448
}
@@ -48,29 +52,18 @@ public SseEmitter subscribe(String channel) {
4852

4953
@Scheduled(fixedRate = HEARTBEAT_INTERVAL)
5054
public void heartbeat() {
51-
List<SseEmitter> deadEmitters = new ArrayList<>();
52-
53-
channelEmitters.values().forEach(emitters ->
54-
emitters.forEach(emitter -> {
55+
channelEmitters.forEach((channel, emitters) -> {
56+
for (SseEmitter emitter : emitters) {
5557
try {
56-
emitter.send(SseEmitter.event().comment("ping"));
58+
emitter.send(
59+
SseEmitter.event()
60+
.name("heartbeat")
61+
.data("ping")
62+
);
5763
} catch (Exception e) {
58-
deadEmitters.add(emitter);
64+
emitter.complete();
65+
removeEmitter(channel, emitter);
5966
}
60-
})
61-
);
62-
63-
deadEmitters.forEach(emitter -> {
64-
emitter.complete();
65-
removeEmitterByEmitter(emitter);
66-
});
67-
}
68-
69-
private void removeEmitterByEmitter(SseEmitter emitter) {
70-
channelEmitters.forEach((channel, emitters) -> {
71-
emitters.remove(emitter);
72-
if (emitters.isEmpty()) {
73-
channelEmitters.remove(channel);
7467
}
7568
});
7669
}

src/main/java/devut/buzzerbidder/global/security/CustomAuthenticationFilter.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,13 @@ private void authenticate(HttpServletRequest request, HttpServletResponse respon
7373
return;
7474
}
7575

76-
// 허용된 API 경로들 (회원가입, 로그인, 토큰 재발급, 이메일 인증, SSE 구독)
76+
// 허용된 API 경로들 (회원가입, 로그인, 토큰 재발급, 이메일 인증)
7777
if(requestURI.equals("/api/v1/users/signup") ||
7878
requestURI.equals("/api/v1/users/signin") ||
7979
requestURI.equals("/api/v1/users/refresh") ||
8080
requestURI.equals("/api/v1/users/oauth/signin") ||
8181
requestURI.equals("/api/v1/users/email/verification") ||
82-
requestURI.equals("/api/v1/users/email/verification/verify") ||
83-
requestURI.equals("/api/v1/notifications/subscribe")) {
82+
requestURI.equals("/api/v1/users/email/verification/verify")) {
8483
filterChain.doFilter(request, response);
8584
return;
8685
}

0 commit comments

Comments
 (0)