スマートフォン・タブレットからインターネットサーバーオペレーション HTML5.x

APPW.jp HTML5.x

Server-Sent Events(EventSource)を試してみます

Server-Sent Events を試用してみます。

Server-Sent Events W3C Candidate Recommendation 11 December 2012

サーバからイベントを受信します。 イベントを受け取るために EventSource オブジェクトを作成します。イベントを生成するスクリプトの URI を設定します。

  var source = new EventSource('sse.php');

インスタンスを生成したら、メッセージの受け取りができます。

  source.onmessage = function(event) {
    document.getElementById('msg').innerHTML = 
    '<p>' + event.data + '</p>';
  }

上記は、event フィールドのないメッセージを受け取ります。デフォルトの event タイプは message です。addEventListener() を使用すると  event タイプごとにメッセージを受け取ります。

  source.addEventListener('message', function(event){
    document.getElementById('msg').innerHTML = 
    '<p>' + event.data + '</p>'
  },false);

イベントを送信するサーバサイドのスクリプトは PHP で用意しました。

<?php 
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

  echo 'event: ' . 'messages' . PHP_EOL;
  echo 'id: ' . time() . PHP_EOL;
  echo 'data: ' . 'Server Time ' . date('h:i:s', time()) . ', Server Sent Events Sample.' . PHP_EOL;
  echo 'retry: ' . '5000' . PHP_EOL;
  echo PHP_EOL;
  ob_flush();
  flush();
?>

イベントを受信するスクリプトのサンプルです。


<div id="msg"><p>メッセージ</p></div>
<script type="text/javascript">
  function sse(){
    if (typeof (EventSource) !== 'undefined') {
        var source = new EventSource('sse.php');
                
        source.addEventListener('messages', function(event){
            document.getElementById('msg').innerHTML = '<p>' + event.data + '</p>' ;
        },false);
         
        source.addEventListener('end', function(event){
            document.getElementById('msg').innerHTML = '<p>終了します。</p>' ;
            source.close();
        },false);

        source.onerror = function (event) {
            if (source.readyState === EventSource.CLOSED) {
                document.getElementById('msg').innerHTML = '<p>終了しています。</p>' ;
            }
            else if (source.readyState === EventSource.OPEN) {
                document.getElementById('msg').innerHTML = '<p>終了します。</p>' ;
                source.close();
            }
        }        
    } else {
        document.getElementById('msg').innerHTML = '<p>Server-Sent Events はサポートされていません。</p>' ;
    }
  }
  window.onload = sse;
</script>

以下にて実際にイベントの受信を試みます。


メッセージ

HTML5 Canvas で画像の表示

SVG で図表を埋め込んでみます

HTML5 で追加された Text-level semantics 要素

HTML5 のセクション要素

HTML5 は CR へ

via IPv4

カテゴリー

アーカイブ