Server-Sent 이벤트 - 단방향 메시징
Server-Sent 이벤트는 서버에서 자동으로 업데이트를 받는 웹페이지를 의미합니다.
이전에도 웹페이지에서 업데이트가 있는지 물어봐야 했던 경우에도 가능했습니다. 서버를 통해 이벤트를 보내면 업데이트가 자동으로 도착할 수 있습니다.
예: Facebook/Twitter 업데이트, 평가 업데이트, 새 블로그 게시물, 이벤트 결과 등
다음은 클라이언트측 JavaScript 및 서버측 PHP 코드를 포함하는 W3School의 샘플 코드입니다.
var source = new EventSource("demo_sse.php");
source.onmessage = function(event) {
document.getElementById("result").innerHTML += event.data + "< ; br />";
};
demo_sse.php에서 지속적으로 데이터를 얻어 그 결과를 div의 ID로 출력하는 코드입니다. 결과의.
<?php
header('콘텐츠 유형: 텍스트/이벤트 스트림');
header('Cache-Control: no-cache');
$time = date('r');
echo "data: 서버 시간: {$time}nn";
flush();
?>
서버의 현재 시간을 클라이언트에 반환하는 코드입니다. 마지막으로 다음과 유사한 결과가 클라이언트 페이지에 표시됩니다.
서버 시간은 Fri, 29 Aug 2016 02:03:21 +0800
서버 시간은 Fri , 29 Aug 2016 02:03:24 +0800
서버 시간: Fri, 29 Aug 2016 02:03:27 +0800
서버 시간: Fri, 29 Aug 2016 02: 03:30 +0800
서버 시간은: 2016년 8월 29일 금요일 02:03:33 +0800
...
서버에서 보낸 이벤트 알림 수신
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 이벤트가 발생하면 수신된 데이터를 ID가 "result"인 요소에 푸시합니다.
서버 전송 이벤트 지원 감지
다음 예에서는 서버에서 보낸 이벤트에 대한 브라우저 지원을 감지하기 위해 추가 코드 조각을 작성했습니다.
if(typeof(EventSource)!=="undefine")
{
// 브라우저가 Server-Sent를 지원합니다
// 일부 코드...
}
else
{
// 브라우저가 Server-Sent를 지원하지 않습니다..
}
서버 측 코드 예제
위 예제가 작동하려면 데이터 업데이트를 보낼 수 있는 서버도 필요합니다(예: PHP 및 ASP).
서버측 이벤트 스트리밍의 구문은 매우 간단합니다. "Content-Type" 헤더를 "text/event-stream"으로 설정합니다. 이제 이벤트 스트림 전송을 시작할 수 있습니다.
예
<?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: " & now())
Response.Flush()
%>
코드 설명:
헤더 "Content-Type"을 "text/event-stream"으로 설정
페이지가 캐시되지 않도록 지정
전송 날짜 출력(항상 "data: "로 시작)
웹 페이지의 출력 데이터 새로 고침