最近のWebSocket事情についてまとめとく
最近のWebSocket事情についてまとめとく
id:Jxck(@Jxck_)さんからのリクエストもありましたので、現状でのWebSocket情報をまとめておきます。
※この情報は2010/9/1時点のものです。ご覧になっている時点の情報とは変わっている可能性があります。
※2010/9/1:いろいろ更新しました。
ざっくり説明
一言で説明すると、WebServerとWebBrowser用の双方向通信用のプロトコル。
Server側からのプッシュができるので、XHRでポーリングする必要がない。
現行のWebSocket対応ブラウザ側には,same originポリシーによる制限はないようです。
仕様
最新版の仕様を確認してください。
日本語版は以下を参照
「仕様だけじゃよう分からん!」という人は以下を読むといいかも
※とりあえず一度動かしてみるとどんなものかわかるきがする。
大きな仕様変更
近頃仕様が大きく変わりました。draft75以前とdraft76以降はほぼ別ものです。
おおまかにいうと、ブラウザからサーバにつなぐときにハンドシェイクが必要なのですが、ハンドシェイクするときのヘッダ情報がかわりました。
詳しくは以下サイトを参照。
- 「続・ハイパフォーマンスWebサイト」に書かれたWebSocket記事への更新 - Nothing ventured, nothing gained.
- WebSocket Draft75 « ケンタテクブロ
- Jettyで始めるWebSocket超入門:第6回 アプリケーションの作成と配布物の生成|gihyo.jp … 技術評論社
下の記事をみた感じだとまだまだ今後も仕様が変わりそうですね。
Serverの対応情報
今のところ私が把握しているサーバ実装です。
- shirasu - Project Hosting on Google Code→Erlangの軽量HTTPライブラリMisultinをベースにしたWebSocketフレームワークになる予定だそうです(Thanks!id:MiCHiLUさん)
- PHP
- Perl
- Clojure
※最新版仕様の実装はpywebsocket,Goが対応が早かった。Chromeの実装確認用?( WebSocket draft 76 のサーバサイドの実装始めた方いますか? - html5-developers-jp | Google グループ )
※node.js+Socket.IO+Socket.IO-nodeはAdobe Flash Socketを使うことで、IEなど未対応のブラウザとも通信できるようにしています!素敵!(参考->node.jsのSocket IO-nodeでWebSocket - but hopeful)
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 - Realtime client push powered by HTML5 websockets, beyond AJAX
- ChaosProxy
- WebSocketクライアント実装部分のソースがかなり有益http://github.com/yuiseki/chaos_proxy
その他
- Kanasanさんのまとめ記事
- WebSocket用ベンチマーク