2012-06-07 12 views
121

私はリアルタイムチャットのためにnodejs/socket.ioを調査しています。私はルームを実装するためのアドバイスが必要です。socket.ioルームまたは名前空間?

名前空間を使用するか、部屋の機能を使用してチャッター同士を完全に分離する方が良いでしょうか?

部屋と名前空間の実際の技術的な違いは何ですか?

リソースの使用に違いはありますか?

答えて

165

これは名前空間と部屋は中を持っているものである共通(socket.io v0.9.8 - 物事は変化している場合がありますので、完全な書き直しを関与そのv1.0のを注意してください):

  • 両方を名前空間(io.of('/nsp'))と客室(socket.join('room')は、サーバー側で作成され
  • 複数の名前空間と複数の部屋共有し、同じ(のWebSocket)接続
  • サーバはは、nsp/roomに接続/接続されたクライアントにのみメッセージを転送します。(クライアントは、それがすでにオンに存在する場合にのみ、その名前空間に追加されます

    • 名前空間io.connect(urlAndNsp)を使用してクライアントによって接続されている:それは、違い

    をフィルタリングすることは、単にクライアント側ではありません

  • 部屋はサーバ側でのみ接続することができます(ただし、サーバ側でクライアントを参加させるためのAPIを作成するのは簡単です)
  • 名前空間ができauthorization protected
  • 許可が部屋では使用できませんが、カスタム認証は、サーバー上の前述の、簡単に作成するAPIに追加することができ、ケース1で部屋を使用して曲げられている
  • 名前空間は常にグローバルスコープ
に根ざしている(「グローバル」の名前空間をデフォルト)名前空間の一部である
  • 部屋

    概念を名前(部屋または名前空間)と混同しないように、区画を使用して概念を参照し、実装の他の2つの名前はコンセプトのです。あなた

    • 必要ごとのコンパートメント承認のであれば、名前空間は、名前空間/部屋コンボ
    • を使用し、あなたが 階層化コンパートメント(2層max)をしたい場合は
    • を取るための最も簡単なルートであるかもしれません
    • クライアント側のアプリケーションが(コンパートメントは気にせずに)互いに分離する必要がある異なる部分で構成されている場合は、名前空間を使用します。

    後者の例は、おそらく別々に開発された(たとえばサードパーティ製の)別々のモジュールが同じアプリケーションで使用されていて、単一のネットワーク接続。

    これは実際にはベンチマークされていませんが、メッセージを分割してグループ化するためにプロジェクト内に単純なコンパートメントが必要な場合はどちらかが問題ありません。

    あなたの質問に答えるかどうかはわかりませんが、この回答に至るまでの研究は少なくとも私がより明確になるのを助けました。

  • +3

    socket.ioバージョン> = 1.0以降に変更されたメジャーはありますか? – Xeroxoid

    +1

    最後のバージョンの変更点については、http://socket.io/docs/rooms-and-namespaces/を参照してください。この回答は部屋のことを理解するのに便利です http://stackoverflow.com/questions/24041220/sending-message -i-specific-id-in-socket-io-1-0/24224146#24224146 –

    +1

    名前空間は私のWebアプリケーションの特定の領域で、その領域のクライアントのグループと言えるでしょうか? – Onaiggac

    9

    あなたがしたいことによって異なります。

    の違いは実装が難しいことです。 各ページをリロードしてルームに参加する方法を作成する必要があります。あなたは自分のJavaScriptクライアントとクライアントでvar example = io.connect('http://localhost/example');を記述する必要が名前空間を持つ

    は、自動的に名前空間に追加されます。利用の

    例:

    • 部屋:プライベートチャット。
    • 名前空間:ページのチャット。
    43

    これは古い質問ですが、トピックに関するいくつかの調査を行った後、私は受け入れられた答えが重要な点ではっきりしていないことがわかります。 Guillermo Rauch自身(see link)によると: 実行中のアプリケーションで名前空間を動的に作成することは理論的には可能ですが、主にアプリケーションのあらかじめ定義された別のセクションとして使用します。一方、ユーザー/接続のグループに対応するために、即時に随時コンパートメントを作成する必要がある場合は、ルームを使用することをお勧めします。

    関連する問題