Server-Sent Events覚え書き

なかなか書く機会はなかったのだけど、ふと使えそう!、という場面があったので、Server-Sent Eventsを書いてみたのでメモ。

レスポンスのContent-Typeはtext/event-stream

dataを組み立てる際は、改行(\r, \n, \r\n)をエスケープする。 http://www.w3.org/TR/eventsource/#parsing-an-event-stream

http://dev.ariel-networks.com/wp/archives/4168

任意に改行を入れられると、任意のイベントを定義されてしまうので、何らかの入力を元に出力するときには、改行コードのエスケープが必要。

UTF-8であること、という制約もあり、とりあえずはJSONにしておくのが扱いやすくてよさげ。
JSONにするときに改行はエンコードしてくれないことがあるっぽいので、そこを処理するか、改行で分割してからJSONにするのが良いっぽい。

idを指定しておくと、retry時にLast-Event-Idヘッダにどこまで受信したか教えつつリクエストしてくれる

reconnect/retryが仕様化されているのが非常にすばらですね。

bufferingされると少し遅延がある

frontにnginxがいて、proxy_bufferingがonのとき(デフォルトなのでだいたいのとき)は、X-Accel-Bufferingをoffもつけると遅延されなくなる。

IEはまだ使えないっぽいらしい

Android端末とかも対応する範囲は限られそう。

http://caniuse.com/eventsource

訂正: OperaOpera Mobileの勘違いでした。