Ktor 서버의 Server-Sent Events (SSE)
필수 의존성: io.ktor:ktor-server-sse
코드 예시: server-sse
Server-Sent Events (SSE)는 서버가 HTTP 연결을 통해 클라이언트에 이벤트를 지속적으로 푸시할 수 있도록 하는 기술입니다. 클라이언트가 서버를 반복적으로 폴링할 필요 없이 서버가 이벤트 기반 업데이트를 전송해야 하는 경우에 특히 유용합니다.
Ktor에서 지원하는 SSE 플러그인은 서버와 클라이언트 간에 단방향 연결을 생성하는 간단한 방법을 제공합니다.
TIP
클라이언트 측 지원을 위한 SSE 플러그인에 대해 자세히 알아보려면 다음을 참조하십시오:
NOTE
양방향 통신에는
제한 사항
Ktor는 SSE 응답에 대한 데이터 압축을 지원하지 않습니다. 만약
SSE 설치
SSE
플러그인을 애플리케이션에 설치하려면, 지정된
install
함수에 전달하십시오. 아래 코드 스니펫은 SSE
을(를) 설치하는 방법을 보여줍니다... - ...
embeddedServer
함수 호출 내부에. - ...
Application
클래스의 확장 함수인 명시적으로 정의된module
내부에.
SSE 세션 처리
SSE
플러그인을 설치한 후, SSE 세션을 처리할 라우트를 추가할 수 있습니다. 이를 위해 라우팅 블록 내에서 sse()
함수를 호출합니다. SSE 라우트를 설정하는 두 가지 방법이 있습니다:
특정 URL 경로 사용:
kotlin경로 없음:
kotlin
SSE 세션 블록
sse
블록 내에서 지정된 경로에 대한 핸들러를 정의하는데, 이는 ServerSSESession
클래스로 표현됩니다. 이 블록 내에서 다음 함수와 속성을 사용할 수 있습니다:
send()
ServerSentEvent
를 생성하여 클라이언트에 전송합니다. call
ApplicationCall
입니다. close()
close()
메서드는 모든 send()
작업이 완료되면 자동으로 호출됩니다. NOTE
close()
함수를 사용하여 세션을 닫는다고 해서 클라이언트에 종료 이벤트가 전송되는 것은 아닙니다. 세션을 닫기 전에 SSE 스트림의 끝을 알리려면 send()
함수를 사용하여 특정 이벤트를 전송하십시오. 예시: 단일 세션 처리
아래 예시는 /events
엔드포인트에 SSE 세션을 설정하고, 각 이벤트 사이에 1초(1000ms) 지연을 두어 SSE 채널을 통해 6개의 개별 이벤트를 전송하는 방법을 보여줍니다:
전체 예시는 server-sse를 참조하십시오.
SSE 하트비트
하트비트는 비활성 기간 동안 이벤트를 주기적으로 전송하여 SSE 연결이 활성 상태를 유지하도록 보장합니다. 세션이 활성 상태로 유지되는 한, 서버는 구성된 간격으로 지정된 이벤트를 전송합니다.
하트비트를 활성화하고 구성하려면 SSE 라우트 핸들러 내에서 .heartbeat()
함수를 사용하십시오:
이 예시에서는 연결을 유지하기 위해 10밀리초마다 하트비트 이벤트가 전송됩니다.
직렬화
직렬화를 활성화하려면 SSE 라우트에서 serialize
매개변수를 사용하여 사용자 정의 직렬화 함수를 제공하십시오. 핸들러 내에서 ServerSSESessionWithSerialization
클래스를 사용하여 직렬화된 이벤트를 전송할 수 있습니다:
이 예시의 serialize
함수는 데이터 객체를 JSON으로 변환하는 역할을 하며, 변환된 JSON은 ServerSentEvent
의 data
필드에 배치됩니다.
전체 예시는 server-sse를 참조하십시오.