回答:
これは、名前空間とルームに共通するものです(socket.io v0.9.8-v1.0は完全な書き直しを伴うため、状況が変わっている可能性があることに注意してください)。
違い:
io.connect(urlAndNsp)
(サーバーにすでに存在する場合にのみ、クライアントはその名前空間に追加されます)概念と名前(部屋または名前空間)を混同しないように、コンパートメントを使用して概念を参照し、他の2つの名前を使用して概念を実装します。だからあなたが
後者の例は、別々に開発された可能性のある異なるモジュール(サードパーティなど)がそれぞれ独立してsocket.ioを使用し、同じアプリで使用され、単一のネットワーク接続を共有したい大きなクライアントアプリです。
これを実際にベンチマークしたわけではないので、メッセージを分離してグループ化するためにプロジェクトに単純なコンパートメントが必要なだけの場合は、どちらでも問題ないようです。
それがあなたの質問に答えるかどうかはわかりませんが、この答えに至るまでの調査は少なくとも私がより明確に見るのに役立ちました。
それは古い質問ですが、トピックについていくつかの調査を行った後、受け入れられた回答が重要な点で明確ではないことがわかりました。Guillermo Rauch氏自身(リンクを参照)によれば、実行中のアプリで動的に名前空間を作成することは理論的には可能ですが、それらは主にアプリケーションの事前定義された個別のセクションとして使用します。一方、ユーザー/接続のグループに対応するために、その場でアドホックコンパートメントを作成する必要がある場合は、部屋を使用するのが最適です。
それはあなたが何をしたいかによります。
主な違いは、その部屋実装が難しいことです。各ページのリロードでルームに参加するメソッドを作成する必要があります。
では名前空間あなただけ記述する必要が var example = io.connect('http://localhost/example');
あなたにJavaScriptクライアントとクライアントが自動的に名前空間に追加されます。
利用例:
部屋と名前空間は通信をセグメント化し、個々のソケットをグループ化します。
部屋または名前空間へのブロードキャストは、メンバーだけに届くことはありません。
名前空間とルームの違いは次のとおりです。
違いは主に誰が管理するかです
使用するものを決定するには、セグメンテーションをフロントエンドとバックエンドのどちらで管理するかを決定する必要があります
名前空間を使用すると、同じ名前のオブジェクトを作成できますが、スコープは別の名前空間に存在するため、それらは別の名前空間に存在するため、別々になります。
これは、Socket.IO名前空間を使用する場合と同じ考え方のプロセスです。モジュール式のNode Webアプリケーションを構築している場合は、さまざまなモジュールの名前空間を作成する必要があります。名前空間のコードを振り返ると、異なる名前空間でまったく同じイベントをリッスンできたことがわかります。Socket.IOでは、デフォルト接続の接続イベントと/ xxx名前空間の接続イベントは異なります。たとえば、サイトにチャットとコメントシステムがあり、両方をリアルタイムにしたい場合は、それぞれに名前空間を付けることができます。これにより、独自のコンテキストでのみ動作するSocket.IOアプリケーション全体を構築できます。
これは、パッケージ化およびインストールするものを構築する場合にも当てはまります。誰かがデフォルトの名前空間で特定のイベントをすでに使用しているかどうかはわからないので、独自のイベントを作成してそこで聞く必要があります。これにより、パッケージを使用する開発者のつま先を踏まないようにすることができます。
名前空間を使用すると、接続をさまざまなコンテキストに分割できます。これをルームと比較すると、接続をグループ化できるため、同じ接続を他のルームに結合することもできます。
名前空間を使用すると、Socket.IOが動作するさまざまなコンテキストを作成できます。部屋を使用すると、これらのコンテキスト内でクライアント接続をグループ化できます。