2

私は pubnub を学んでおり、そのドキュメントを読んでいますが、マルチルーム チャット ボックスを管理する方法が見つかりません。

デフォルトでは、チャンネルは誰でも聞くことができます。購読して公開するのは簡単です。

私が望んでいるのは、メインのパブリック ルーム (これまでのところ非常に良い) を持つことですが、他のユーザーに読まれるリスクなしに、誰でも他の誰とでもプライベートに話すことができる必要があります。

これらの動的な部屋にはタブが付けられ、ユーザーはある部屋から別の部屋に移動できる必要があります。

もう 1 つの要件は、誰かとプライベートに話しても、サブスクライブしている他のルームから追い出されないことです (チャット中に別のルームに新しいメッセージが投稿されたことを通知することはできます)。

これを達成するためのベストプラクティスは何ですか?

  • 別のチャネル (動的に作成) を使用しますか?
  • 1 つのチャネルを使用して、ステータス、疑似ルーム ID、または主人公に従ってメッセージをフィルタリングしますか?
  • 多重化 (1 つのソケットのみ) を使用しますか?

ドキュメントは単一の部屋での基本的なシナリオのみを説明しており、これについてはインターネット上には何もないため、これを達成するための最良の方法を知る必要があります.

ありがとうございました。

PS: PubNub が一度に 2 つ以上のチャネルを推奨していないことは知っています (これについての説明を見つけるのに苦労していますが)。

PPS: 私は socket.io で punbub を使用しています

4

3 に答える 3

10

Socket.IO と PubNub によるチャット サービスのプライベート ルームの管理

複数のチャット ルーム (たとえば、freenode.net) に参加して座ることができる、おそらく IRC クライアントに似た、マルチルーム チャット サービスを作成する方法を求めています。これは可能であり、あなたの側でそれを正しく行うにはいくつかの特別なタスクが必要です.

メイン チャット ルーム用とプライベート「ME」サイド チャット用の2 つのチャネルを開くことから始めます。この側のプライベート「ME」チャネルでは、通常次のような、長くて予測不可能なセッション ID スタイルのチャネル名を作成する必要があります。

YTQyOGFiNWEtNTZmZC00OGVhLTgxZjktMWE3ZmMyMzc3MTRhCg==

これは、ユーザーの参照 ID のようなものです。この ID は 1 対 1 のプライベート チャットに使用でき、別の部屋はグループ チャットに使用できます。PubNub Access Manager (PAM)と呼ばれる Access Control Management を使用して、このグループ チャットを保護します。

追加のセキュリティ プラクティスについては、ヘルプ デスクおよびナレッジ ベースのセキュリティの PubNub サポートで入手できるセキュリティ推奨ガイドを確認する必要があります。

プライベート チャネルが確立されたので、プライベート サーバー (権限を提供できるサーバー) を介してチャットを送受信し、ユーザーごとにメッセージを中継できるようにすることで、安全な通信が可能になります。これを行う方法については、PubNubのサーバーからソケット IO クライアントへのイベントの送信に関するドキュメントのこのセクションを参照してください。

2 番目のチャネルは、すべてのルームのパブリック チャット用です。マルチタブをサポートするには、io.connect() メソッドを介して新しいルームを追加することで、PubNub の Socket IO のチャネル多重化機能を使用するだけです。新しいタブを開くたびに、無制限に持つことができる io.connect() を介して新しい名前空間を開きます。ただし、一度に 2 つまでの PubNub チ​​ャネルにのみ接続する必要があることに注意してください (質問で既に指摘しました)。

複数のフィードとカテゴリをサブスクライブするための PubNub Socket IO メソッドを次に示します。

Socket.IO ドキュメント

https://github.com/pubnub/pubnub-api/tree/493d7fc97fb683379fc78be3ca7ad9bc97eb4200/socket.io#restricting-yourself-to-a-namespace

VimeoのSocket.IOビデオ

http://vimeo.com/34496366

Socket.IO 多重化コードの例

https://github.com/pubnub/pubnub-api/tree/493d7fc97fb683379fc78be3ca7ad9bc97eb4200/socket.io/multiplexing

簡単な結論として、安全な方法を使用して、プライベートな「ME」チャネルを確立し、ユーザーごとにメッセージを送受信します。そして、すべての公開チャット ルーム データをプッシュする公開「チャット」チャネル。公開チャットでは多重化が重要になります。

于 2012-05-06T05:21:12.237 に答える
6

上記の答えは 2012 年には正しかったのですが、それ以来多くのことが変わりました。プライベート チャット ルームは、PubNub Access Manager を使用して有効にすることができます。これにより、特定のチャネルでの公開/購読アクセスが明示的に許可されます。

これが機能する方法は、アクセス トークン (別名「認証キー」) を使用することです。開発者 (あなた) は認証キー (基本的に任意の文字列) を作成し、それを PubNub Access Manager に渡します。次に、この認証キーのルールを設定します (つまり、認証キーが発行および/または購読できるチャネル)。

この認証キーは、チャネルへのアクセスが必要なすべてのデバイスに提供され、デバイスがチャネルをサブスクライブまたはパブリッシュするときに使用されます。

基本的なドキュメントはこちらから入手できます: http://www.pubnub.com/docs/javascript/tutorial/access-manager.html

チャネル「privateChat」への 60 分間の読み取り/書き込み権限を auth_key に付与します。

 pubnub.grant({
 channel  : 'privateChat',
 auth_key : 'abxyz12-auth-key-987tuv',
 read     : true,
 write    : true,
 ttl      : 60
 });
于 2014-08-30T23:14:26.490 に答える
0

前の回答に追加すると、これが私がハッキングしているだけかどうかはわかりませんが、現在の socket-io ライブラリでマルチチャネル接続を行うには、io.connected = false; を設定する必要があります。別のチャネル構成オブジェクトを渡す前に。

例えば:

var pubnub_setup = {
  channel       : 'public_channel',
  publish_key   : 'demo',
  subscribe_key : 'demo'
};

var private_setup = {
  channel       : 'private_channel',
  publish_key   : 'demo',
  subscribe_key : 'demo'
};

// Make your public socket connections
var publicSocket = io.connect( 'http://pubsub.pubnub.com/pub_socket', pubnub_setup );
var anotherPublicSocket = io.connect( 'http://pubsub.pubnub.com/another_pub_socket', pubnub_setup);

// Set false otherwise you keep getting back the previous created socket which is
// bound to the original channel 'public_channel'
io.connected = false;
var secretSocket = io.connect( 'http://pubsub.pubnub.com/secret_mulitplex_socket_namespace', private_setup );

これで、プライベート チャネルで新しいシークレット ソケットを作成し続けることができます。

于 2012-05-27T23:34:43.223 に答える