이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 4163|회답: 4

[.NET 코어] SSE (1)는 ASP.NET 코어를 SSE 서버로 사용합니다

[링크 복사]
2024-4-5 11:54:12에 게시됨 | | | |
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를 사용하여 클라이언트 코드를 작성하세요:


프로젝트를 다음과 같은 효과로 시작하세요:



참조:
하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.




이전의:.NET으로 개발된 Garnet 캐시와 Redis의 간단한 비교
다음:JS는 ctrl + enter 키 조합을 감지합니다
 집주인| 2024-4-5 12:03:28에 게시됨 |
기본 브라우저 EventSource API는 허용되는 요청 유형에 몇 가지 제한을 둡니다: 통과할 수 있는 매개변수 URL은 와 withCredentials뿐이며, 따라서 다음과 같습니다:

요청 본문은 전달할 수 없습니다: 요청을 실행하는 데 필요한 모든 정보를 URL에 인코딩해야 하며, 대부분의 브라우저에서는 2000자 제한이 있습니다.
커스텀 요청 헤더는 전달할 수 없습니다
GET 요청만 할 수 있고, 다른 방법은 지정할 수 없습니다.
연결이 끊기면 재시도 정책을 제어할 수 없습니다. 브라우저가 조용히 몇 번 재시도하다가 멈추는데, 이는 어떤 견고한 애플리케이션에도 충분하지 않습니다.


fetch-event-source

이 라이브러리는 서버 전송 이벤트를 사용할 수 있도록 Fetch API를 기반으로 한 대체 인터페이스를 제공합니다. 이벤트 스트림 형식과 완전히 호환되므로, 이미 이벤트를 발행하는 서버가 있다면 이전처럼 사용할 수 있습니다. 하지만 이제는 요청과 응답에 대해 더 많은 통제권을 갖게 되었습니다

하이퍼링크 로그인이 보입니다.
2024-11-14 14:34:25에 게시됨 |
박식한
 집주인| 2024-12-25 16:36:44에 게시됨 |
작은 슬래그 게시글 2024-4-5 12:03
기본 브라우저 EventSource API는 허용되는 요청 유형에 몇 가지 제한을 둡니다: 통과할 수 있는 유일한 매개변수 URL은 withCredentia ...

NPM 패키지를 브라우저 지원 자바스크립트로 컴파일하세요
https://www.itsvse.com/thread-10762-1-1.html
 집주인| 2024-12-25 16:48:45에 게시됨 |
SSE (2) 브라우저 탭 전환 후 fetch-event-source 재연결 문제
https://www.itsvse.com/thread-10906-1-1.html
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com