SSE 소개
SSE는 서버-전송 이벤트(Server-Sent Events)의 약자로, 문자 그대로 서버가 클라이언트에 정보를 푸시하는 것을 의미합니다. SSE는 일방향 채널입니다,서버는 오직 클라이언트에게만 정보를 보낼 수 있습니다클라이언트는 첫 번째 트리거 후에만 SSE 요청을 받을 수 있으며, 응답할 수 없습니다.
SSE의 주요 특징은 다음과 같습니다:
- 사용 편의성: SSE는 일반 텍스트, JSON 등과 같은 텍스트 기반 데이터 형식을 사용하여 데이터를 전송하고 파싱하는 것이 비교적 간단합니다.
- 일방향 통신: SSE는 서버와 클라이언트 간의 일방향 통신을 지원하며, 서버는 데이터를 클라이언트에게 적극적으로 푸시할 수 있고, 클라이언트는 데이터만 수신할 수 있습니다.
- 실시간: SSE는 장기 연결을 구축하여 서버가 빈번한 요청 없이도 실시간으로 데이터를 클라이언트에게 전달할 수 있게 합니다.
SSE vs. WebSocket
WebSocket은 실시간 양방향 통신을 가능하게 하는 또 다른 웹 기술로, SSE와 몇 가지 면에서 다릅니다. SSE와 WebSocket의 비교 자료는 다음과 같습니다:
- 데이터 푸시 방향: SSE는 서버와 클라이언트 간의 일방향 통신이며, 서버는 데이터를 클라이언트에게 적극적으로 푸시할 수 있습니다. 반면 WebSocket은 양방향 통신으로, 서버와 클라이언트 간에 실시간 양방향 데이터 교환을 가능하게 합니다.
- 연결 구축: SSE는 긴 HTTP 기반 연결을 사용하여 일반 HTTP 요청과 응답을 통해 연결을 구축하며, 이를 통해 실시간 데이터 푸시를 수행합니다. WebSocket은 WebSocket 연결을 설정하여 양방향 통신을 가능하게 하는 맞춤형 프로토콜을 사용합니다.
- 호환성: SSE는 HTTP 프로토콜을 기반으로 하므로 대부분의 최신 브라우저에서 사용할 수 있으며 추가적인 프로토콜 업그레이드가 필요하지 않습니다. WebSockets는 대부분의 최신 브라우저에서도 지원되지만, 일부 특수 네트워크 환경에서는 문제가 될 수 있습니다.
- 적용 가능한 시나리오: SSE는 서버가 실시간으로 데이터를 클라이언트에 푸시하는 시나리오(예: 주가 업데이트, 뉴스 실시간 푸시 등)에 적합합니다. WebSocket은 채팅 애플리케이션이나 다인 협업 편집과 같이 실시간 양방향 통신이 필요한 시나리오에 적합합니다.
- 귀하의 구체적인 비즈니스 필요와 시나리오에 따라 SSE와 WebSocket 중 어느 쪽을 선택할지는 실제 필요에 따라 달라집니다. 서버가 클라이언트에게 한 방향으로만 데이터를 전달하고 단순하고 호환성을 유지하고 싶다면 SSE가 좋은 선택입니다. 양방향 통신을 원하거나 더 고급 기능과 제어가 필요하다면 WebSocket이 더 적합할 수 있습니다.
SSE 이벤트 스트림 형식
이벤트 스트림은 UTF-8 형식으로 인코딩되어야 하는 단순한 텍스트 데이터 스트림입니다. 이벤트 스트림메시지는 두 줄의 줄바꿈으로 구분됩니다。 콜론으로 시작하는 행동 댓글은 무시됩니다. 각 필드는 필드 이름과 콜론, 그리고 해당 필드 값의 텍스트 데이터로 표현됩니다.
필드는 다음과 같습니다:
이벤트: 이벤트 유형을 식별하는 데 사용되는 문자열입니다. 이 문자열이 지정되어 있으면, 브라우저는 지정된 이벤트 이름을 가진 이벤트를 적절한 리스너로 전송합니다; 클라이언트는 addEventListener()를 사용해 지정된 이벤트를 청취해야 합니다. 메시지가 이벤트 이름을 지정하지 않으면 온메시지 핸들러를 호출할 수 있습니다.
데이터: 메시지의 데이터 필드입니다. 이벤트소스가 data:로 시작하는 여러 연속된 줄을 받으면, 이들을 연결하여 줄 바바꿈을 삽입합니다. 끝에 있는 줄바꿈이 제거되었습니다.
아이디: 이벤트 ID는 현재 EventSource 객체의 내부 속성인 "Last Event ID"의 속성 값이 됩니다.
재시도: 다시 연결할 시간. 서버와의 연결이 끊기면, 브라우저는 지정된 시간을 기다린 후 다시 연결을 시도합니다. 이 정수는 밀리초 단위로 재연결하는 시간을 명시해야 합니다. 비정수 값이 지정되면 해당 필드는 무시됩니다.
EventSource 인스턴스
EventSource 인터페이스는 웹 콘텐츠와 서버 간의 인터페이스를 통해 이벤트를 전송하는 역할을 합니다.
EventHandler 속성
EventSource.onopen은 연결이 열려 있을 때 호출됩니다. 이벤트소스 온메시지는 이벤트 속성 없이 메시지를 수신할 때 호출됩니다. EventSource.onerror는 연결 예외 시 호출됩니다.
SSE 서버 (ASP.NET 코어)
.NET 8로 새로운 ASP.NET Core 프로젝트를 만들면 컨트롤러 코드는 다음과 같습니다:
링크를 구축하는 클라이언트는 2월마다 메시지를 보내세요.
SSE 클라이언트
View(보기) 페이지에서 html과 js를 사용하여 클라이언트 코드를 작성하세요:
프로젝트를 다음과 같은 효과로 시작하세요:
참조:
하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다. |