알림 기능 구현 기술 선택
💬 알림 기능은 실시간으로 이루어져야 합니다. 서버에서 클라이언트 방향으로만 데이터가 전송이 됩니다. 서버의 부담이 상대적으로 적게 들어가야 합니다.
✅ 실시간을 보장하며, 서버에서 클라이언트로 단반향 데이터 통신을 사용할 수 있는 SSE를 선택하기로 했다. 뿐만 아니라 양방향을 지원하는 WebSocket보다 서버에 주는 부담도 적다.
✔ SSE 기능 구현
💬 알림과 실시간 입찰 가격 조회 기능을 하나의 SSE로 처리하려고 했다. SSE가 별도로 만들어진다면 서버가 부담이 될 수 있다고 판단했기 때문이다.
public class SseService {
private static final Long DEFAULT_TIMEOUT = 1000 * 60 * 30L;
private static final List<SseEmitter> emitters = new ArrayList<>();
public SseEmitter connect(Long id, String lastEventId) {
SseEmitter emitter = new SseEmitter(DEFAULT_TIMEOUT);
emitters.add(emitter);
emitter.onCompletion(() -> emitters.remove(customSseEmitter));
emitter.onTimeout(() -> emitters.remove(customSseEmitter));
try {
emitter.send("connect user : " + id);
} catch (IOException e) {
throw new RuntimeException(e);
}
return emitter;
}
public void send(Long id, Object data) {
for(SseEmitter sendEmitter : emitters) {
try {
sendEmitter.sseEmitter()
.send(SseEmitter.event()
.name(event.toString())
.data(data));
} catch (IOException exception) {
emitters.remove(sendEmitter);
throw new RuntimeException("연결 오류!");
}
}
}
}
✔ 결과
'개발일지 > TIL' 카테고리의 다른 글
[230811] Java Faker로 더미 데이터 생성 (0) | 2023.08.11 |
---|---|
[230810] 2개 이상의 기능을 1개의 SSE로 처리할 때 문제 (0) | 2023.08.10 |
[230808] Polling, SSE, WebSocket ? (0) | 2023.08.08 |
[230807] Java Security AutoConfigure가 될 때 Https Port 매핑 (1) | 2023.08.07 |
[230806] Wrapper 클래스 비교 문제 (0) | 2023.08.06 |