古いブラウザはWebSocketをサポートしていない。これらのブラウザに対してWebSocketの双方向通信に似たユーザエクスペリエンスを提供するためには、ブラウザやプラグインに合った方法へのフォールバックが必要。

古いブラウザを新しいサービスに対応させるのは地雷原に足を踏み入れることとほぼ同義。各ブラウザで長時間のテストを行う必要があり、場合によって(IEのActive X htmlfileオブジェクトなど)ベンダー固有のプロトコルについて深い知識を有している必要がある。

socket.ioは、実行中のブラウザが対応している中で一番適切なリアルタイム通信技術を使って、WebSocket、もしくはWebSocketライクな双方向通信APIをサーバとクライアントに提供する。古いブラウザやモバイルブラウザ(iOS Safari、Android)にも対応する。

これに加えて、socket.ioは切断検出・自動再接続や、カスタムイベント、ネームスペース(名前空間)、リモートコールバック実行など、便利な機能を提供する。


カスタムイベント
socket.ioは、messageやconnect、disconnectなど、あらかじめ設定されているイベントの他に、カスタムイベントを設定することができる。emitメソッドを用いてカスタムイベントを発生させ、あらかじめ設定されているイベントと同様にonメソッドで待機しておくことができる。

ネームスペース
socket.ioでは、ネームスペース(名前空間。socket,ioではルートと呼ぶこともある)を設定できる。このネームスペースには、以下のようにクライアントのio.connectにネームスペースを含むURLを渡してアクセスできる。

  io.connect('ws://localhost:8080/ネームスペース');

ネームスペースは。同じコンテクストを共有しつつ複数のスコープを生成することができる。socket.ioでのネームスペースは、1つのWebSocket(もしくはフォールバック先の他の通信手段の)接続を様々な目的のために共有する手段。ネームスペース(名前空間)については、http://ja.wikipedia.org/wiki/名前空間 を参照する。

io.connectを複数回呼び出して、複数のWebSocketネームスペースを定義することができる。しかし、これは複数のWebSocket接続を生成する訳でない。socket.ioは1つの接続を複数の目的のために利用し(もしくは、複数の接続を1つ統合し)、ネームスペースのロジックをサーバで処理する。複数の接続を発生させるより、はるかに負担の少ない方法。

ネームスペースを使用することにより、複数の種類のタスクを1つのsocket.io接続で処理することができる。WebSocketの仕様には、サブプロトコルというこれに似た考え方がある。特定の機能・動作を特定のネームスペースに限定することによってコードが読みやすくなり、多面的なリアルタイムアプリケーションを構築する上での面倒を低減する。




Nodeクックブック p.142