HTML5-서버 전송 이벤트

기존 웹 응용 프로그램은 웹 서버로 전달되는 이벤트를 생성합니다. 예를 들어 링크를 간단히 클릭하면 서버에서 새 페이지를 요청합니다.

웹 브라우저에서 웹 서버로 흐르는 이벤트 유형을 클라이언트 전송 이벤트라고 할 수 있습니다.

HTML5와 함께 WHATWG Web Applications 1.0은 웹 서버에서 웹 브라우저로 이동하는 이벤트를 소개하며이를 SSE (Server-Sent Events)라고합니다. SSE를 사용하면 웹 서버에서 방문자의 브라우저로 DOM 이벤트를 지속적으로 푸시 할 수 있습니다.

이벤트 스트리밍 접근 방식은 서버에 대한 지속적인 연결을 열어 새로운 정보가 사용 가능할 때 데이터를 클라이언트로 전송하므로 지속적인 폴링이 필요하지 않습니다.

서버 전송 이벤트는 서버에서 클라이언트로 데이터를 스트리밍하는 방법을 표준화합니다.

SSE 용 웹 애플리케이션

웹 응용 프로그램에서 서버 전송 이벤트를 사용하려면 문서에 <eventsource> 요소를 추가해야합니다.

그만큼 src <eventsource> 요소의 속성은 이벤트를 포함하는 데이터 스트림을 보내는 지속적인 HTTP 연결을 제공해야하는 URL을 가리켜 야합니다.

URL은 이벤트 데이터를 지속적으로 전송하는 PHP, PERL 또는 Python 스크립트를 가리 킵니다. 다음은 서버 시간을 예상하는 웹 애플리케이션의 간단한 예입니다.

<!DOCTYPE HTML>

<html>
   <head>
   
      <script type = "text/javascript">
         /* Define event handling logic here */
      </script>
   </head>
   
   <body>
      <div id = "sse">
         <eventsource src = "/cgi-bin/ticker.cgi" />
      </div>
		
      <div id = "ticker">
         <TIME>
      </div>
   </body>
</html>

SSE 용 서버 측 스크립트

서버 측 스크립트는 Content-type다음과 같이 text / event-stream 유형을 지정하는 헤더 .

print "Content-Type: text/event-stream\n\n";

Content-Type을 설정 한 후 서버 측 스크립트는 Event: 태그 뒤에 이벤트 이름이 표시됩니다. 다음 예제는 새 줄 문자로 끝나는 이벤트 이름으로 Server-Time을 보냅니다.

print "Event: server-time\n";

마지막 단계는 다음을 사용하여 이벤트 데이터를 보내는 것입니다. Data: 다음과 같이 개행 문자로 끝나는 문자열 값의 정수가 뒤에 오는 태그-

$time = localtime();
print "Data: $time\n";

마지막으로 다음은 Perl로 작성된 완전한 ticker.cgi입니다.

#!/usr/bin/perl  
print "Content-Type: text/event-stream\n\n";  

while(true) { 
   print "Event: server-time\n"; 
   $time = localtime(); 
   print "Data: $time\n"; 
   sleep(5); 
}

서버에서 보낸 이벤트 처리

서버에서 보낸 이벤트를 처리하도록 웹 애플리케이션을 수정하겠습니다. 다음은 마지막 예입니다.

<!DOCTYPE HTML> 

<html>  
   <head> 
  
      <script type = "text/javascript"> 
         document.getElementsByTagName("eventsource")[0].addEventListener("server-time", 
         eventHandler, false); 
    
         function eventHandler(event) { 

            // Alert time sent by the server 
            document.querySelector('#ticker').innerHTML = event.data; 
         } 
      </script> 
   </head> 
  
   <body> 
      <div id = "sse"> 
         <eventsource src = "/cgi-bin/ticker.cgi" /> 
      </div> 
   
      <div id = "ticker" name = "ticker"> 
         [TIME] 
      </div> 
   </body> 
</html>

Server-Sent 이벤트를 테스트하기 전에 웹 브라우저가이 개념을 지원하는지 확인하는 것이 좋습니다.