このような1:1チャットルームを処理する一般的な方法は、ユーザーIDに基づいてルームURLを生成することです。すでに言及したように、この問題は、どちらのユーザーもチャットを開始でき、どちらの場合も同じ会議室に入るはずです。
複合キーでユーザーIDを辞書順に並べ替えることで、これを解決できます。代わりに、IDのユーザー名、と例えば:
var user1 = "Frank";
var user2 = "Eusthace";
var roomName = 'chat_'+(user1<user2 ? user1+'_'+user2 : user2+'_'+user1);
console.log(user1+', '+user2+' => '+ roomName);
user1 = "Eusthace";
user2 = "Frank";
var roomName = 'chat_'+(user1<user2 ? user1+'_'+user2 : user2+'_'+user1);
console.log(user1+', '+user2+' => '+ roomName);
<script src="https://getfirebug.com/firebug-lite-debug.js"></script>
共通のフォローアップの質問現在のユーザーのためのチャットルームのリストを表示する方法のようです。上記のコードはそれに対処していません。 NoSQLデータベースでは一般的ですが、このユースケースを可能にするためにデータモデルを拡張する必要があります。現在のユーザのチャットルームのリストを表示したい場合は、それを可能にするようにデータをモデル化する必要があります。これを行う最も簡単な方法は、データモデルに各ユーザーのチャットルームのリストを追加することです:JS-SHA256モジュールでハッシュ
"userChatrooms" : {
"Frank" : {
"Eusthace_Frank": true
},
"Eusthace" : {
"Eusthace_Frank": true
}
}
私はこれが古いと知っていますが、ちょうどいくつかのアイデアを探していました。これを柔軟にするには、配列内のユーザーをソートしてソートします。次に、使いやすさと他の人がルーム名を簡単に推測できないようにするために、MD5を作成するか、何らかの方法でハッシュします。この方法で、部屋のユーザー数を拡大できます。私はこれをしばらく使用してきました。 – Eduard
ポイントありがとうございました。 js-sha256モジュールをハッシュしてくれました。 'let chatHash = SHA256('エージェント: '+ agentId +' _user: '+ userId) –
これは素晴らしい回答です。ありがとうございます。しかし、このチャットルームの名前が一意であることを確認する方法が不思議です。特に一般的な名前の場合。チャットを両方のユーザーノードに保存しても、私は2人のフランクとチャットをすることができます。今私はチャットのFBキーを使用して、withUser:recipientUidを持つ各ユーザーの/会話にrefを格納し、ユーザーの1人がチャットを開始したときに、他のユーザーとの間に存在します。しかし、これは最高のデザインではないかもしれないようです。何かご意見は?どうも! –