EventSource インターフェイスは、Server-sent event のウェブコンテンツのインターフェイスです。EventSource インターフェイスは、HTTP サーバーとの間で永続的なコネクションを開き、イベントを text/event-stream の形式で受け取ります。コネクションは EventSource.close() (en-US) を呼び出して閉じられるまで開いたままになります。
いったんコネクションが開かれると、サーバーから入って来るメッセージは message イベントの形でコードに配信されます。
WebSocket とは異なり、Server-sent event は単一方向です。つまり、データ メッセージはサーバーからクライアント(たとえばユーザーのウェブブラウザー)に向けて、一方向に配信されます。これは、メッセージの形でクライアントからサーバーにデータを送る必要がない場合には良い選択です。例えば、EventSource はソーシャルメディアの状況アップデートやニュースフィードのようなものを扱ったり、クライアント側ストレージ(IndexedDB や web storage など)の仕組みにデータを配信したりするアプローチに有用です。
このインターフェイスは、親である EventTarget からプロパティを継承します。
定義名 | 数値 | 意味 |
---|---|---|
CONNECTING | 0 | 接続は、まだ確立されていないか、または close されていてユーザー・エージェントは再接続している。 |
OPEN | 1 | ユーザー・エージェントは、open 接続を有していて、イベントが受信され次第 それを配送している。 |
CLOSED | 2 | 接続は open しておらず、UA は再接続しようと試行していない。何らかの致命的エラーがあったか、close() メソッドが呼び出された。 |
このインターフェイスは、親である EventTarget からメソッドを継承します。
var evtSource = new EventSource('sse.php'); var eventList = document.querySelector('ul'); evtSource.onmessage = function(e) { var newElement = document.createElement("li"); newElement.textContent = "message: " + e.data; eventList.appendChild(newElement); }
受信されたそれぞれのイベントは、EventSource オブジェクトの onmessage イベントハンドラーを実行させます。ここでは、新しい <li> 要素を生成してその中にメッセージのデータを書き込み、この要素を文書の中にある既存のリスト要素に追加します。
メモ: この例の全容が GitHub にあります。Simple SSE demo using PHP をご覧ください。
表示内容: |
表示内容: |