English 中文(简体)
HTML5 - Server-Sent Events
  • 时间:2024-12-22

HTML5 - Server Sent Events


Previous Page Next Page  

Conventional web apppcations generate events which are dispatched to the web server. For example, a simple cpck on a pnk requests a new page from the server.

The type of events which are flowing from web browser to the web server may be called cpent-sent events.

Along with HTML5, WHATWG Web Apppcations 1.0 introduces events which flow from web server to the web browsers and they are called Server-Sent Events (SSE). Using SSE you can push DOM events continuously from your web server to the visitor s browser.

The event streaming approach opens a persistent connection to the server, sending data to the cpent when new information is available, epminating the need for continuous polpng.

Server-sent events standardize how we stream data from the server to the cpent.

Web Apppcation for SSE

To use Server-Sent Events in a web apppcation, you would need to add an <eventsource> element to the document.

The src attribute of <eventsource> element should point to an URL which should provide a persistent HTTP connection that sends a data stream containing the events.

The URL would point to a PHP, PERL or any Python script which would take care of sending event data consistently. Following is a simple example of web apppcation which would expect server time.

<!DOCTYPE HTML>

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

Server Side Script for SSE

A server side script should send Content-type header specifying the type text/event-stream as follows.

print "Content-Type: text/event-stream

";

After setting Content-Type, server side script would send an Event: tag followed by event name. Following example would send Server-Time as event name terminated by a new pne character.

print "Event: server-time
";

Final step is to send event data using Data: tag which would be followed by integer of string value terminated by a new pne character as follows −

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

Finally, following is complete ticker.cgi written in Perl −

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

";  

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

Handle Server-Sent Events

Let us modify our web apppcation to handle server-sent events. Following is the final example.

<!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> 
      <span id = "sse"> 
         <eventsource src = "/cgi-bin/ticker.cgi" /> 
      </span> 
   
      <span id = "ticker" name = "ticker"> 
         [TIME] 
      </span> 
   </body> 
</html>

Before testing Server-Sent events, I would suggest that you make sure your web browser supports this concept.

Advertisements