>웹 프론트엔드 >H5 튜토리얼 >서버에서 실시간 업데이트에 HTML5 서버 ent 이벤트 (SSE) API를 어떻게 사용합니까?

서버에서 실시간 업데이트에 HTML5 서버 ent 이벤트 (SSE) API를 어떻게 사용합니까?

Robert Michael Kim
Robert Michael Kim원래의
2025-03-12 15:19:18154검색

서버에서 실시간 업데이트를 위해 HTML5 서버 에너지 이벤트 (SSE) API 사용 방법

HTML5 Server-Sent Events (SSE) API는 웹 서버가 클라이언트의 브라우저에 실시간으로 업데이트를 푸시하는 간단하고 효율적인 방법을 제공합니다. WebSockets와 같은 기술과 달리 SSE는 단방향입니다. 서버는 클라이언트에 데이터를 보낼 수 있지만 클라이언트는 동일한 연결을 통해 서버로 데이터를 다시 보낼 수 없습니다. 이 단순성을 사용하면 서버가 스톡 티커, 라이브 점수 또는 채팅 애플리케이션 (클라이언트가 메시지를받는 데 필요한 경우)과 같은 클라이언트에게 업데이트를 푸시 해야하는 시나리오에 이상적입니다.

SSE를 사용하려면 JavaScript 코드에서 EventSource 객체를 작성해야합니다. 이 객체는 이벤트를 스트리밍하는 서버 측 엔드 포인트와 지속적으로 연결됩니다. 기본 예는 다음과 같습니다.

 <code class="javascript">const eventSource = new EventSource('/events'); eventSource.onmessage = function(event) { console.log('Received event:', event.data); // Process the received data here, eg, update the UI }; eventSource.onerror = function(error) { console.error('EventSource failed:', error); };</code>

이 코드는 /events 에 연결된 EventSource 만듭니다. onmessage 이벤트 핸들러는 서버에서 보낸 데이터를 수신하고 onerror 핸들러는 오류를 포착합니다. 서버 AT /events 데이터를 올바른 SSE 형식으로 보내도록 구성되어야합니다 (아래 서버 측 섹션에서 자세히 설명). 잠재적 오류를 처리하고 재 연결 로직을 구현해야합니다 (이후 섹션에 자세히 설명). 서버는 클라이언트 또는 서버가 연결을 닫을 때 까지이 연결을 통해 데이터를 지속적으로 전송합니다.

Websockets와 같은 다른 실시간 커뮤니케이션 기술과 비교하여 서버에 대한 이벤트 (SSE) 사용의 이점

SSE는 WebSockets와 같은 다른 실시간 커뮤니케이션 기술에 비해 몇 가지 장점을 제공합니다.

  • 단순성 : SSE는 클라이언트와 서버 측에서 구현하기가 훨씬 간단합니다. API는 간단하고 프로토콜은 WebSockets보다 덜 복잡합니다. 이것은 개발 시간과 복잡성을 줄입니다.
  • 효율성 : SSE는 단방향 통신에 더 효율적입니다. 서버 간 통신 만 허용하므로 WebSockets와 같은 양방향 통신 프로토콜과 관련된 오버 헤드를 피합니다. 이는 특히 많은 클라이언트를 다룰 때 대역폭 소비량과 서버로드가 줄어 듭니다.
  • HTTP 기반 : SSE는 기존 HTTP 인프라를 활용하여 기존 웹 서버 및 인프라와 쉽게 통합 할 수 있습니다. 이를 통해 전문화 된 설정 또는 프로토콜이 필요하지 않습니다.
  • 내장 재시도 메커니즘 : SSE에는 내장 재 시도 메커니즘이 포함되어 있습니다. 연결이 손실되면 클라이언트는 지정된 지연 후 서버에 자동으로 다시 연결하려고 시도합니다. 이것은 오류 처리를 단순화하고 견고성을 보장합니다. (이 동작을 여전히 사용자 정의 할 수는 있지만).

그러나 양방향 통신이 필요할 때 Websockets가 우수합니다. SSE의 단방향 특성은 클라이언트가 서버로 적극적으로 데이터를 다시 전송 해야하는 시나리오에서 적용 가능성을 제한합니다.

내 SSE 클라이언트 응용 프로그램 내에서 오류 처리 및 재 연결 로직 구현

SSE에는 내장 재 시도 메커니즘이 있지만 강력한 응용 프로그램은보다 제어되고 반응이 좋은 경험을 위해 사용자 정의 오류 처리 및 재 연결 로직을 구현해야합니다. 향상된 예는 다음과 같습니다.

 <code class="javascript">const eventSource = new EventSource('/events'); let reconnectAttempts = 0; const maxReconnectAttempts = 5; eventSource.onmessage = function(event) { console.log('Received event:', event.data); reconnectAttempts = 0; // Reset on successful message }; eventSource.onerror = function(error) { console.error('EventSource failed:', error); if (reconnectAttempts  { eventSource.close(); eventSource = new EventSource('/events'); // Reconnect reconnectAttempts ; }, retryDelay); } else { console.error('Max reconnect attempts reached. Giving up.'); // Handle the failure appropriately, eg, display an error message to the user } };</code>

이 개선 된 예제는 다음을 추가합니다.

  • 재 연결 시도 : 무한 루프를 방지하려는 재 연결 시도 수를 제한합니다.
  • 지수 백 오프 : 각 시도마다 재 시도 지연을 기하 급수적으로 증가시켜 연결 문제 중에 서버로드가 줄어 듭니다.
  • 실패 처리 : 최대 재 연결 시도 수에 도달하는 상황을 처리하는 메커니즘을 제공합니다.

서버 측 코드를 구조화하여 서버에서 SSE (Server-Sent Events) API를 사용하여 이벤트를 효율적으로 전송합니다.

SSE의 서버 측 구현은 사용 된 기술 (예 : Node.js, Python, Java)에 따라 다릅니다. 그러나 핵심 원칙은 동일하게 유지됩니다. 서버는 데이터를 올바른 SSE 형식으로 보내야합니다. 이 형식에는 특정 HTTP 헤더 ( Content-Type: text/event-stream )가 필요하고 특정 구분 제로 형식으로 구성된 데이터가 필요합니다. 다음은 Express를 사용하여 node.js를 사용하는 기본 예입니다.

 <code class="javascript">const express = require('express'); const app = express(); const port = 3000; app.get('/events', (req, res) => { res.writeHead(200, { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive' }); // Simulate sending events every second setInterval(() => { const data = `data: ${new Date().toISOString()}\n\n`; res.write(data); }, 1000); req.on('close', () => { console.log('Client disconnected'); }); }); app.listen(port, () => { console.log(`Server listening on port ${port}`); });</code>

이 node.js 코드는 /events 에서 엔드 포인트를 설정합니다. res.writeHead 함수는 필요한 HTTP 헤더를 설정합니다. setInterval 함수는 매 초마다 데이터 전송을 시뮬레이션합니다. 결정적으로, 각 데이터 메시지에는 SSE 사양에 따라 두 개의 Newline 문자 ( \n\n )가 이어집니다. req.on('close') 이벤트 핸들러는 단절을 기록하는 데 중요합니다. 선택한 서버 측 기술 및 데이터 소스 에이 코드를 조정해야합니다. 효율적인 스케일링을 위해로드 밸런서 및 비동기 프레임 워크와 같은 많은 동시 연결을 처리하도록 설계된 기술을 사용하는 것을 고려하십시오.

위 내용은 서버에서 실시간 업데이트에 HTML5 서버 ent 이벤트 (SSE) API를 어떻게 사용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.