最近の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以降はほぼ別ものです。
おおまかにいうと、ブラウザからサーバにつなぐときにハンドシェイクが必要なのですが、ハンドシェイクするときのヘッダ情報がかわりました。
詳しくは以下サイトを参照。
- 「続・ハイパフォーマンスWebサイト」に書かれたWebSocket記事への更新 - Nothing ventured, nothing gained.
- ケンタテクブロ
- 第6回 アプリケーションの作成と配布物の生成|gihyo.jp … 技術評論社
下の記事をみた感じだとまだまだ今後も仕様が変わりそうですね。
Serverの対応情報
今のところ私が把握しているサーバ実装です。
-
- shirasu - A WebSocket framework based on Misultin and Erlang/OTP - Google Project Hosting→Erlangの軽量HTTPライブラリMisultinをベースにしたWebSocketフレームワークになる予定だそうです(Thanks!id:MiCHiLUさん)
- PHP
- Perl
- Clojure
※最新版仕様の実装はpywebsocket,Goが対応が早かった。Chromeの実装確認用?(WebSocket draft 76 のサーバサイドの実装始めた方いますか? - html5j.org | Google グループ)
※node.js+Socket.IO+Socket.IO-nodeはAdobe Flash Socketを使うことで、IEなど未対応のブラウザとも通信できるようにしています!素敵!(参考->node.jsのSocket IO-nodeでWebSocket - Block Rockin’ Codes)
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で発見!
web-socket-js URL でFlash fallbackが出来るのは良いんだけど。。。 #wsbof
2010-08-31 19:34:24 via web
プロキシ問題。wss (port 443) を使えば良いのだけれど、Flash fallbackだと駄目だった。誰かが修正してくれたのだけれど、今度は自己署名証明書じゃないと動かない現象 orz #wsbof
2010-08-31 19:56:34 via web
どんなことに使われてるか
エコーサーバorチャットの例が多い感じ。面白そうな取り組みを紹介します。
- KanasanさんのVNChttp://github.com/Kanasansoft/WebSocketRemote/downloads
- ネットワーク上に流れるパケットを可視化するデモ・アプリケーションWebGL + WebSocket DEMO — Accense Technology, Inc.
- こてさきAjax:HTMLプレゼンをWebSocketを利用し、iPhoneから操作するツールを作ってみました. - livedoor Blog(ブログ)
- ServerからPushするサービスPusher | HTML5 WebSocket Powered Realtime Messaging Service
- ChaosProxy
- WebSocketクライアント実装部分のソースがかなり有益http://github.com/yuiseki/chaos_proxy