개발자
sse에 대해 공부하고 있던 중 sse는 클라이언트와 커넥션이 끊어질 때 까지 커넥션을 계속 유지 한다는 내용을 보았는데요. 이때 커넥션이 유지된다는게 쓰레드를 계속 잡아먹고 있다는 건가요? 아니면 커넥션은 유지되지만 쓰레드랑은 상관 없는걸까요?
답변 2
Server Sent Event는 비동기 방식을 사용해 구현합니다. 따라서 연결을 유지하는 동안 쓰레드를 계속 점유하지는 않아요. 대신 Event를 보내주기 위해서 무언가 처리가 필요할 때는 쓰레드를 점유합니다. 구체적인 시나리오는 다음으로 알고 있어요! 1. SSE 소켓을 클라이언트에게 발급하는 Http 요청을 처리하는 동안 쓰레드를 점유한다. 2. 초기 연결 설정이 끝나면 SSE 소켓은 힙에 저장된다. 쓰레드를 점유하지는 않는다. 3. 클라이언트에게 이벤트를 전송할 때는 쓰레드를 점유하고 작업을 처리한다. 이와 관련해서 blocking / non-blocking, sync / async 모델에 대해서 공부해보면 이해하는데 더 도움이 될 것 같아요! 그리고 리눅스 커널에서 제공하는 epoll이라는 I/O 이벤트 알림 인터페이스도 도움이 될 거 같아요. 비동기 서버는 보통 이 인터페이스를 활용하는 걸로 알고 있어서요
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!