HTML Server-Sent 이벤트
- 이전 페이지 HTML5 웹 워커
- 다음 페이지 HTML 예제
Server-Sent 이벤트는 웹 페이지가 서버에서 업데이트를 받을 수 있도록 허용합니다.
Server-Sent 이벤트 - One Way Messaging
Server-Sent 이벤트는 웹 페이지가 자동으로 서버에서 업데이트를 받는 것을 의미합니다.
그전에는 이를 위해 웹 페이지가 업데이트가 사용 가능한지 확인해야 했습니다. Server-Sent 이벤트를 통해 업데이트가 자동으로 도착할 수 있습니다.
예를 들어: Facebook/Twitter 업데이트, 주식 가격 업데이트, 새로운 포스트, 경기 결과 등.
브라우저 지원
표의 숫자는 서버가 이벤트를 전송하는 기능을 완전히 지원하는 첫 번째 브라우저를 나타냅니다.
API | |||||
SSE | 6.0 | 지원하지 않음 | 6.0 | 5.0 | 11.5 |
Server-Sent 이벤트 알림 받기
EventSource 객체는 서버가 이벤트를 전송하는 알림을 받는 데 사용됩니다:
예제
var source = new EventSource("demo_sse.php"); source.onmessage = function(event) { document.getElementById("result").innerHTML += event.data + "<br>"; };
예제 설명:
- 새로운 EventSource 객체를 생성한 다음, 업데이트를 전송하는 페이지의 URL(이 예제에서는 "demo_sse.php")을 지정합니다
- 데이터 업데이트를 받을 때마다 onmessage 이벤트가 발생합니다
- onmessage 이벤트가 발생할 때마다 받은 데이터를 "result" id를 가진 요소에 넣습니다
Server-Sent 이벤트 지원 검사
TIY 예제에서는 서버가 이벤트를 전송하는 기능을 지원하는 브라우저 지원을 검사하기 위해 추가 코드를 작성했습니다:
if(typeof(EventSource) !== "undefined") { // 예! 서버가 이벤트를 전송하는 기능을 지원합니다! // 일부 코드..... } else { // 죄송합니다! 서버가 이벤트를 전송하지 않는다는 기능을 지원하지 않습니다! }
서버 측 코드 예제
위의 예제가 실행되기 위해, 데이터 업데이트를 전송할 수 있는 서버(예: PHP 또는 ASP)가 필요합니다.
서버 측 이벤트 스트림의 문법은 매우 간단합니다. "Content-Type" 헤더를 "text/event-stream"로 설정하십시오. 이제, 이벤트 스트림을 전송하시기 시작할 수 있습니다.
PHP에서의 코드 (demo_sse.php):
<?php header('Content-Type: text/event-stream'); header('Cache-Control: no-cache'); $time = date('r'); echo "data: The server time is: {$time}\n\n"; flush(); ?>
ASP에서의 코드 (VB) (demo_sse.asp):
<% Response.ContentType = "text/event-stream" Response.Expires = -1 Response.Write("data: The server time is: " & now()) Response.Flush() %>
코드 설명:
- 헤더 "Content-Type"을 "text/event-stream"로 설정
- 페이지를 캐시하지 않도록 설정
- 보내려는 날짜를 출력하십시오. 항상 "data: "로 시작합니다.
- 웹 페이지 갱신에 데이터 출력
EventSource 객체
위 예제에서는 onmessage 이벤트를 사용하여 메시지를 가져오지만, 다른 이벤트도 사용할 수 있습니다:
이벤트 | 설명 |
---|---|
onopen | 서버로의 연결이 열릴 때 |
onmessage | 메시지를 수신할 때 |
onerror | 오류가 발생할 때 |
- 이전 페이지 HTML5 웹 워커
- 다음 페이지 HTML 예제