it-swarm.com.de

Beste Möglichkeit, Chat-Kanäle in Firebase zu verwalten

Auf meiner Hauptseite habe ich eine Liste von Benutzern und ich möchte einen Kanal auswählen und öffnen, um mit einem von ihnen zu chatten.

Ich denke, wenn die Verwendung der ID der beste Weg ist und einen Zugriff auf einen Kanal wie USERID1-USERID2 steuern.

Aber natürlich kann Benutzer 2 auch denselben Kanal öffnen, sodass ich etwas finden möchte, das einfacher zu steuern ist.

Bitte, wenn Sie mir helfen möchten, geben Sie mir ein Beispiel in Javascript mit einer Firebase-URL/Array.

Vielen Dank!

16
Eusthace

Eine gebräuchliche Methode zur Behandlung solcher 1: 1-Chatrooms besteht darin, die Raum-URL basierend auf den Benutzer-IDs zu generieren. Wie Sie bereits erwähnt haben, besteht ein Problem darin, dass jeder Benutzer den Chat einleiten kann und in beiden Fällen im selben Raum landen sollte.

Sie können dies beheben, indem Sie die Benutzer-IDs lexikografisch im Verbundschlüssel bestellen. Zum Beispiel mit Benutzernamen anstelle von IDs:

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>

Eine häufige Folgefrage scheint zu sein, wie eine Liste von Chatrooms für den aktuellen Benutzer angezeigt werden kann. Der obige Code spricht das nicht an. Wie in NoSQL-Datenbanken üblich, müssen Sie Ihr Datenmodell erweitern, um diesen Anwendungsfall zuzulassen. Wenn Sie eine Liste von Chatrooms für den aktuellen Benutzer anzeigen möchten, sollten Sie Ihre Daten modellieren, um dies zu ermöglichen. Der einfachste Weg, dies zu tun, besteht darin, dem Datenmodell eine Liste von Chatrooms für jeden Benutzer hinzuzufügen:

"userChatrooms" : {
  "Frank" : {
    "Eusthace_Frank": true
  },
  "Eusthace" : {
    "Eusthace_Frank": true
  }
}
36

In einem typischen Datenbankschema hat jeder Channel/jede ChatGroup einen eigenen Knoten mit einem eindeutigen $ -Schlüssel (erstellt von Firebase). Es sollte keine Rolle spielen, welcher Benutzer den Kanal zuerst geöffnet hat, aber sobald der Knoten (und der entsprechende $ -Schlüssel) erstellt wurden, können Sie diesen einfach als Kanal-ID verwenden.

Hashing/MD5-Strategie ist natürlich eine andere Möglichkeit, aber dann müssen Sie auch diese "Routen" -Informationen sowie $ key auf demselben Knoten speichern - das ist eine IMO-Duplikation (es sei denn, mir fehlt etwas).

2
Neo Split

Das Hashing mit dem Modul js-sha256 funktionierte für mich mit Anweisungen von Frank van Puffelen und Eduard.

import SHA256 from 'crypto-js/sha256'
let agentId = 312
let userId = 567
let chatHash = SHA256('agent:' + agentId + '_user:' + userId)
1
Canbey Bilgili