PHP

EventSourceを使ったSSE(Server-Sent Events)サンプル

はじめに

WebサーバーからWebブラウザーなどのクライアントへデータをPush通知する技術として、
SSE(Server-Sent Events) があります。

実際に送信する HTTP Response のデータフォーマットとして、W3C が JavaScript の API を策定しています。HTML5 の API で、EventSource です。

今回は、Server-Sent Events が実際にどのように動くのかを試したい方を対象に、EventSource のフォーマットを使用したWebサーバー側のソースコード、Webブラウザ側のソースコードを紹介します。

 

 

EventSource のフォーマット

 EventSourceフォーマット
event: <イベント名>\n
data: <データ>\n\n
または
data: <データ>\n\n

EventSourceの例

event: ping
data: This is PING.\n\n

 

Server-Sent Events(SSE):Webサーバー側

  • ping イベントを毎秒送信
  • ランダムな間隔(秒)でメッセージを送信

SANACHAN
SANACHAN
MIME-Type は "test/event-stream" を使います。

 

Server-Sent Events(SSE):Webブラウザー(クライアント)側

  • EventSource に対する addEventListener で ping を受ける
  • EventSource の onmessage でランダムな間隔のメッセージを受ける
  • HTTPセッションが切断された場合などは onerror で受け取る

SANACHAN
SANACHAN
こちらはJavaScriptの読込と、表示用の箱を用意しているのみです。

 

 

実行結果

SSE実行結果

 

おまけ:CORS(Cross Origin Resource Sharing)

サーバーとクライアントが異なるドメインに所属している(server.php と index.html)場合、
CORS の設定が必要になります。



SANACHAN
SANACHAN
Webサーバー側の header に CORS の設定を追加します。

 

こちらの記事もよく読まれています

  • この記事を書いた人
  • 最新記事
SANACHAN

SANACHAN

「生涯一エンジニア」を掲げ、大手グローバル企業でSE/PGとして8年勤め、キャリアアップ転職した現役のエンジニアです。世にあるメジャーな全プログラム言語(コボル除く)を自由に扱えます。一児の父。自分のため、家族のため、日々勉強してます。システムエンジニア、プログラミングに関する情報を蓄積している雑記帳です。

-PHP
-, , , , ,