リアルタイムチャットのためにnodejs/socket.ioを調査していますが、ルームを実装するためのアドバイスが必要です。
名前空間を使用するか、ルーム機能を使用して、おしゃべりのグループを互いに完全に分離する方が良いでしょうか?
部屋と名前空間の本当の技術的な違いは何ですか?
リソース使用量に違いはありますか?
これは名前空間と部屋が持っているものですin common(socket.io v0.9.8-v1.0は完全な書き換えを含んでいたので、物事が変更されたかもしれないことに注意してください):
differences:
io.connect(urlAndNsp)
を使用して(クライアントがサーバー上に既に存在する場合のみ、その名前空間にクライアントが追加されます)概念と名前(部屋または名前空間)を混同しないように、compartmentを使用して概念を参照し、他の2つの名前概念の実装。もしあなたが
後者の例は、それぞれ個別にsocket.ioを使用して、おそらく個別に開発された(たとえばサードパーティ)異なるモジュールが同じアプリで使用され、単一のネットワーク接続を共有したい大規模なクライアントアプリです。
これを実際にベンチマークしていないので、メッセージを分離してグループ化するためにプロジェクト内の単純なコンパートメントだけが必要な場合、どちらかが良いように思えます。
それがあなたの質問に答えるかどうかはわかりませんが、この答えに至るまでの研究は、少なくとも私がより明確に見るのを助けました。
それは古い質問ですが、このトピックに関するいくつかの調査を行った後、受け入れられた答えが重要な点で明確ではないことがわかりました。 Guillermo Rauch自身による( リンクを参照 ):実行中のアプリで動的に名前空間を作成することは理論的には可能ですが、主にアプリケーションの定義済みの個別のセクションとして使用します。一方、ユーザー/接続のグループに対応するために、その場でアドホックコンパートメントを作成する必要がある場合は、ルームを使用することをお勧めします。
何をしたいかに依存します。
主な違いは、roomsの実装が難しいことです。ページをリロードするたびにルームに参加するためのメソッドを作成する必要があります。
namespacesを使用すると、javascript clientにvar example = io.connect('http://localhost/example');
と記述するだけで、クライアントは自動的にネームスペースに追加されます。
使用例:
ルームとネームスペースは通信をセグメント化し、個々のソケットをグループ化します。
ルームまたは名前空間へのブロードキャストは、メンバーだけに全員に届くわけではありません。
名前空間と部屋の違いは次のとおりです。
違いは主にそれらを管理する人です
使用するものを決定するには、セグメンテーションをフロントエンドで管理するかバックエンドで管理するかを決定する必要があります
名前空間を使用すると、同じ名前のオブジェクトを作成できますが、異なる名前空間(スコープとも呼ばれる)に存在するため、オブジェクトは分離されます。
これは、Socket.IO名前空間で必要な同じ思考プロセスです。モジュラーNode Webアプリケーションを構築している場合、さまざまなモジュールの名前空間を削除する必要があります。名前空間のコードを振り返ると、異なる名前空間で同じイベントをリッスンできることがわかります。 Socket.IOでは、デフォルト接続の接続イベントと/ xxx名前空間の接続イベントは異なります。たとえば、サイトにチャットとコメントシステムがあり、両方をリアルタイムにしたい場合は、それぞれに名前空間を付けることができます。これにより、独自のコンテキストでのみ存続するSocket.IOアプリケーション全体を構築できます。
これは、パッケージ化してインストールするものを構築している場合にも当てはまります。誰かが既にデフォルトの名前空間で特定のイベントを使用しているかどうかを知ることはできないので、独自のイベントを作成してそこで聞く必要があります。これにより、パッケージを使用する開発者の足を踏まないようにすることができます。
名前空間を使用すると、接続をさまざまなコンテキストに分割できます。これを部屋と比較すると、接続をグループ化できます。同じ接続を他の部屋にも参加させることができます。
名前空間を使用すると、Socket.IOが動作するさまざまなコンテキストを作成できます。部屋を使用すると、これらのコンテキスト内でクライアント接続をグループ化できます。