« モバイルガジェットだけでWebSocketネットワーク | メイン | 食育ならぬ数育 »

WebSocketの基礎知識(2012年年始版)

WebSocketに関する、よくある質問や知っておいたほうがよさそうなことをまとめてみました。
技術的なことについては深くはふれていません。
あやまりがあれば指摘してください。

Q.
仕様が2つあるみたいだけど...
A.
WebSocketは、主にブラウザ上で使うことを考慮された通信の規格で、通信の「プロトコル」とJavaScriptから使うための「API」に仕様がわかれています。前者は「WebSocket Protocol」として「IETF」が、後者は「WebSocket API」として「W3C」がかかわっています。

Q.
WebSocketってまだ仕様が固まってないんじゃないの?
A.
WebSocket ProtocolはIETFのRFCの「標準化提案」に、WebSocket APIはW3Cの「勧告候補」になりました。IETFにもW3Cにも承認プロセスがあり、それぞれ最後には「標準」と「勧告」になりますがここでは詳細は述べません。
一応承認プロセスの途中なので、実際に使うには躊躇するかもしれません。しかし、誤解を恐れずに大胆に言うと、『こういう仕様を書いたんだけど、おかしかったら意見ください。』という段階を過ぎ、『仕様が固まったので使ってみてください。実際に使ってみておかしかったら修正します。』という段階に達しています。

Q.
WebSocketとWebSockets、どっちが正しいの?
A.
仕様の「草案(ドラフト)」で一時混乱していましたが、WebSocket ProtocolのRFCやWebSocket APIの勧告候補では「WebSocket」で収束しました。しかし、ブログのレベルではWebSocketの表記が統一されていません。「Web」と「Socket」をわけたり、単数形であったり複数形であったり、表記のゆれがあります。つまり「WebSocket」「WebSockets」「Web Socket」「Web Sockets」の4つです。このうち、単語をわける「Web Socket」「Web Sockets」は最近ではほとんど見られません。また、日本語のブログでは「WebSocket」が大半ですが、英語圏のブログでは「WebSockets」が多く見られます。英語圏の情報も検索したい場合には、もうしばらく「WebSockets」をキーワードに追加しておく必要があります。英語圏のブログで使われる単語も、今後は仕様にあわせて「WebSocket」になっていくのではないでしょうか。

Q.
どのブラウザで使えるの?
A.
「Google Chrome」と「Safari」では、そのままWebSocketが使用できます。
後述するセキュリティの問題のため「Firefox」では一時的に無効になっていましたが、現在のバージョンは一応使用できます。ただし、APIのオブジェクト名が「ベンダープレフィックス」付きになっています(本来はWebSocketというオブジェクト名ですが、MozWebSocketになっています)。Firefoxの現在の開発バージョンでベンダープレフィックスが外れたので、現在の開発バージョンの正式リリースとなるFirefox11(3月リリース予定)では普通に使えるようになるでしょう。
「Opera」にもWebSocketが実装されているのですが、セキュリティの問題のため標準の設定では無効にされています。今のバージョンでも設定を変更すれば使えるようになりますが、次のバージョンでは正式に有効になるかもしれませんね。
「Internet Explorer」の開発バージョンが既にWebSocketに対応しています。Windowsの次期バージョンが今年リリースされる予定ですので、多分それに合わせてIE10もリリースされるのではないでしょうか。
iPhone・iPad・iPod touch等の「iOS(ただしバージョン4.2.1以上)」でも、標準ブラウザのSafariがWebSocketに対応しています。
「Android」の標準ブラウザはWebSocketに対応していませんが、Android版のFirefoxがベンダープレフィックス付きでWebSocketに対応しています。
組み込み向けのブラウザである「NetFront Browser」は、発表されたばかりの最新バージョン「NetFront Browser NX v2.0 DTV Profile」が対応しているそうです。

Q.
Node.jsがないとWebSocketは使えないって聞いたんだけど...
A.
よくある誤解ですが、他の環境でも使えます。Node.jsは実行言語にJavaScriptを使用するサーバで、ノンブロッキングI/O・イベント駆動を特徴としています。これらの特徴は、WebSocketと非常に親和性があり、WebSocketサーバの実装の第一候補になるのも頷けます。
しかし、実行言語がJavaScriptであることを除けば、同じようなことが可能な環境は他にもあります。例えばJavaで実装されたサーバであるJettyは、ノンブロッキングスレッディングモデルを採用し、イベント発動時にInterfaceの実装を呼び出します。
自分の得意言語や実行環境の制限、将来性などを総合的に判断し、環境を選択してみてはいかがでしょうか。

Q.
WebSocketってセキュリティに問題があるんじゃなかったっけ?
A.
確かにWebSocket Protocolの古いバージョンの草案ではセキュリティホールが指摘されていましたが、RFCの現在の仕様では既に解決済みです。ただし、まだ古いバージョンで実装されたブラウザもあるため注意が必要です。実は、FlashやJava Appletで通信を行う際にも同様の問題があるのですが、普及してしまっているため修正が難しい状態となっています。

Q.
また、使うには早いんじゃないの?
A.
インターネットの世界には、仕様策定段階の技術でも使われる文化があります。また、WebSocketは仕様が固まる前から注目されてた技術であり、一部のブラウザのサポートや色々なサーバの実装が進んでいたため、それなりに熟れていると言えます。個人的な意見ですが、ノウハウがまだ貯まっていないため、商用にはまだ躊躇するかもしれませんが、個人で使うのであれば決して早くはありません。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

Google

タグ クラウド