Keep on moving

あんまりまとまってないことを書きますよ

最近のWebSocket事情についてまとめとく

id:Jxck(@Jxck_)さんからのリクエストもありましたので、現状でのWebSocket情報をまとめておきます。
※この情報は2010/9/1時点のものです。ご覧になっている時点の情報とは変わっている可能性があります。
※2010/9/1:いろいろ更新しました。
※書かれてから相当な日数がたっていますので、このエントリーは役に立ちません。WebSocketはRFC(http://www.ietf.org/rfc/rfc6455.txt)がでました。最新の状況は他のサイトをご覧になることをお勧めします。情報をアップデートできなくてすみません。

ざっくり説明

一言で説明すると、WebServerとWebBrowser用の双方向通信用のプロトコル。
Server側からのプッシュができるので、XHRでポーリングする必要がない。
現行のWebSocket対応ブラウザ側には,same originポリシーによる制限はないようです。

仕様

最新版の仕様を確認してください。
The WebSocket API
日本語版は以下を参照

「仕様だけじゃよう分からん!」という人は以下を読むといいかも

※とりあえず一度動かしてみるとどんなものかわかるきがする。

大きな仕様変更

近頃仕様が大きく変わりました。draft75以前とdraft76以降はほぼ別ものです。
おおまかにいうと、ブラウザからサーバにつなぐときにハンドシェイクが必要なのですが、ハンドシェイクするときのヘッダ情報がかわりました。
詳しくは以下サイトを参照。

下の記事をみた感じだとまだまだ今後も仕様が変わりそうですね。

Browserの対応情報

現状では75以前と76以降の両方に対応しているブラウザはありません。
各ブラウザは最新版の仕様に追従しているみたいですね。

Browser 75以前 76
IE6〜8 × ×
Firefox3 × ×
Firefox4 ×
Opera10.6 × ×
Safari5 ×
Chrome4,5 ×
Chrome6 ×

※websocket.js(http://github.com/gimite/web-socket-js/)を使うことで、IEなど未対応のブラウザとも通信できる様子。上述のSocket-IO-Nodeも使っています。
ちょっと気になる発言をTwitterで発見!


どんなことに使われてるか

エコーサーバorチャットの例が多い感じ。面白そうな取り組みを紹介します。