目次 |
---|
・Server-Sent Eventsとは ・Server-Sent Eventsの使い方 |
Server-Sent Eventsは、HTTP上で疑似サーバプッシュを行う場合のデータ形式とクライアントに関する仕組み(API)です。
つまり、サーバから送信(PUSH)されたイベントを受信する仕組みです。
これは、「Comet」(彗星)または「Long-Time Polling」と呼ばれる疑似サーバプッシュ技術です。
「Polling」(ポーリング)とは、定期的なリクエスト(要求)のリトライを繰り返すことです。
「Long-Time Polling」では、クライアントからポーリング処理を行うのですが、サーバ空のレスポンス(返事)を長時間終わらせないことで、レスポンスをサーバからの送信(PUSH)の経路として用いるものです。
Server-Sent Eventsは、この技術を標準化させたものと言えます。
「Web Socket」の方が、より本格的な双方向通信を実現する技術です。
しかし、Web Socketでは専用のサーバを必要とします。
Server-Sent Eventsは、既存のサーバサイド技術で実現が可能なため、手軽に利用が可能と言えます。
そのため、WEBサーバとFTPサーバなどしか使えないレンタルサーバでは、Web Socketは利用できない場合がありますが、Server-Sent Eventsなら利用が可能です。
Server-Sent Eventsは、2011年8月現在以下のブラウザで対応しています。
FireFox 6~、Safari 5~、Opera 10.62~、Google Chrome 6~
Server-Sent Eventsは、サーバからクライアントにプッシュするデータ形式が定められています。
データ形式はテキストですので、JavaやPHP、Perl、Ruby、Pythonあるいはシェルなど、既存のサーバサイド技術で対応が可能です。
MIMEタイプは、「text/event-stream」とします。
文字コードは、「UTF-8」です。
(内部文字コードが、shift_jisやEUC-JPのサーバでは文字コード変換が必要です。)
改行コードは、LF(\n)とCR(\r)のいずれの組み合わせでも対応します。
(「\r\n」、「\n」のみ、「\r」のみ)
「:」(コロン)で始まる行は、コメント行です。
空行と末尾は、イベント(送信)の区切りとなります。
行指向のデータ形式で、1行に「フィールド名:フィールド値」となるようにします。
1回の送信は、数行の「フィールド名:フィールド値」を1ブロックとして行います。
フィールド値の前には、空白を一つだけ挿入可です。
定義できるフィールド名は、以下の通りです。
EventSourceオブジェクトを生成することで、受信を開始します。
生成時の第1引数が、プッシュするサーバのURLです。
サーバからメッセージを受け取ると、EventSourceオブジェクトの「message」イベントが発生します。
EventSourceオブジェクトのプロパティは、以下の通りです。
EventSourceオブジェクトのメソッドは、以下の通りです。
EventSourceオブジェクトのイベントは、以下の通りです。