HTML5のサーバー送信イベント(SSE)の仕組みと実装方法を解説
サーバー送信イベント(SSE)とは
サーバー送信イベント(Server-Sent Events:SSE)は、サーバーからクライアントへデータをストリーミング配信する仕組みを標準化した技術です。クライアントが定期的にリクエストを繰り返すポーリング方式と異なり、サーバー側から一方向的にデータを継続的にプッシュできる点が大きな特徴です。
基本的な使い方
Webアプリケーションでサーバー送信イベントを利用するには、ドキュメント内に <eventsource> 要素を追加します。
<eventsource> 要素の src 属性には、イベントデータを含むデータストリームを送信するための永続的なHTTP接続を提供するURLを指定します。
このURLは、イベントデータの送信を継続的に担当するPHP、Perl、Pythonなどのスクリプトを指します。以下は、サーバーの時刻を受信して表示するシンプルなWebアプリケーションの例です。
サンプルコード
次のコードを実行すると、HTML5でサーバー送信イベントを利用する方法を実際に確認できます。
<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript">
document.getElementsByTagName("eventsource")[0].addEventListener("server-time", eventHandler, false);
function eventHandler(event){
// サーバーから送信された時刻を表示
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>最後に、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);
}補足:モダンブラウザでの実装方法
なお、<eventsource> 要素は現在のHTML仕様では非推奨となっており、最新のブラウザではJavaScriptの EventSource インターフェースを使用するのが一般的です。「new EventSource('/cgi-bin/ticker.cgi')」のようにオブジェクトを生成し、addEventListenerでイベントを購読することで、同様の動作を実現できます。
SSEは、チャットアプリの新着通知、株価やニュースフィードのリアルタイム更新など、サーバーからクライアントへの一方向のデータ配信が必要な場面で特に活躍します。WebSocketと比べると実装がシンプルで、通常のHTTP接続を利用できる点もメリットです。
-
HTML5でSVG画像を使用する方法|img・object・embedタグの使い分けを解説
HTML5でSVG画像を表示する基本 HTML5でSVG(Scalable Vector Graphics)画像を利用するには、<img>要素または<svg>要素を使用します。SVGファイルをWebページに組み込む方法は主に3つあり、それぞれ特徴が異なるため、用途に応じて適切なものを選択することが重要です。 SVGを読み込む3つの方法 <img>タグ:最もシンプルな方法。JPEGやPNGなどの通常の画像と同じ感覚で扱えます。 <object>タグ:外部リソースとしてSVGを読み込みます。フォールバックコンテンツを指定できるのが特徴です。 &l
-
HTML5のlocalStorage APIを使ってブラウザにデータを保存する方法
HTML5 localStorageとは HTML5のlocalStorageは、文字列データをブラウザ内に保存し、現在のセッションが終了してもデータを保持し続けることができる仕組みです。localStorageは有効期限なしでデータを保存します。一方、sessionStorageはセッション中のみ有効であり、ブラウザを閉じると保存されたデータは失われます。 localStorageの用途と特徴 ローカルストレージは、複数のウィンドウ間で共有でき、セッションをまたいでもデータが持続するストレージとして設計されています。特に、Webアプリケーションではパフォーマンス向上のために、ユーザーが作成