본문 바로가기
asp.net

[.net] SSE(Server-Sent-Event)

by TTTGGG 2024. 11. 29.
728x90
반응형
SMALL

닷넷에서는 HTTP 기반의 SSE를 구현하기 위해 HttpResponse 객체와 같은 기본 HTTP 기능을 활용

 

닷넷 환경에서 SSE 구현 방식

 - SSE를 처리하는 HTTP 앤드포인트를 직접 생성하여 구현, ex) Response.ContentType = "text/event-stream" 으로 SSE 응답 형식 설정

 

SSE가 지원되는 브라우저

 

닷넷 MVC에서 SSE 구현 방법

// ASP.NET MVC에서 SSE 구현 
// 컨트롤러 메서드 작성
public async Task<ActionResult> StreamData()
{
    Response.ContentType = "text/event-stream";
    Response.BufferOutput = false;

    try
    {
        while (true)
        {
            if (!Response.IsClientConnected)
            {
                break;
            }

            var data = new { Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") };
            Response.Write($"data: {Newtonsoft.Json.JsonConvert.SerializeObject(data)}\n\n");
            Response.Flush();

            await Task.Delay(1000); // 1초 대기
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine($"에러 발생: {ex.Message}");
    }

    return null;
}

// 클라이언트에서 SSE 연결
document.addEventListener("DOMContentLoaded", function () {
    const eventSource = new EventSource("/Controller/StreamData");

    eventSource.onmessage = function (event) {
        console.log("받은 데이터:", event.data);
        document.body.innerHTML += `<p>${event.data}</p>`;
    };

    eventSource.onerror = function () {
        console.error("SSE 연결 오류 발생");
    };
});

 

SSE가 적합한 경우

 - 실시간 데이터 스트리밍이 필요한 상황 (주가, 센서 데이터, 알림 시스템, 현황판 등)

 - 클라이언트가 데이터를 요청하지 않고, 서버에서 데이터를 푸시하는 구조가 필요한 경우 

728x90
반응형
LIST