Typowym sposobem obsługi takich pokojów rozmów jest generowanie adresu URL pomieszczenia na podstawie identyfikatorów użytkowników. Jak już wspomniałeś, problem polega na tym, że albo użytkownik może zainicjować czat, aw obu przypadkach powinien skończyć w tym samym pokoju.
Możesz rozwiązać ten problem, zamawiając kody identyfikacyjne użytkowników leksykograficznie w kluczu złożonym. Na przykład z nazwami użytkowników, zamiast identyfikatorów:
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>
wspólnej pytania follow-up wydaje się być jak pokazać listę czatów dla bieżącego użytkownika. Powyższy kod nie uwzględnia tego. Jak to często bywa w bazach danych NoSQL, musisz rozszerzyć swój model danych, aby umożliwić korzystanie z tego przypadku. Jeśli chcesz wyświetlić listę pokojów rozmów dla bieżącego użytkownika, powinieneś modelować dane, aby to umożliwić. Najprostszym sposobem na to jest dodanie listy czatów dla każdego użytkownika do modelu danych:
"userChatrooms" : {
"Frank" : {
"Eusthace_Frank": true
},
"Eusthace" : {
"Eusthace_Frank": true
}
}
Wiem, że jest stary, ale po prostu szukał pomysłów. Możesz uczynić to elastycznym, umieszczając użytkowników w tablicy i sortując je. Następnie, po prostu dla łatwości użycia i aby uniemożliwić innym odgadywanie nazw pokoju, po prostu wytnij z niego MD5 lub w jakiś sposób go skopiuj. W ten sposób możesz zwiększyć liczbę użytkowników w pokoju. Używam tego przez jakiś czas i jest całkiem niezły. – Eduard
Dziękuję za twoje punkty. Hashing z modułem js-sha256 działał dla mnie. 'let chatHash = SHA256 (' agent: '+ agentId +' _user: '+ userId)' –
To jest doskonała odpowiedź, dziękuję. Ale zastanawiam się, jak się upewnić, że nazwa tego pokoju rozmów jest wyjątkowa. Zwłaszcza w przypadku bardziej popularnych nazw. Nawet jeśli przechowuję czat w węźle dla obu użytkowników, mógłbym porozmawiać z 2 Frankami. Teraz myślę o używaniu klawisza FB do czatu, zapisując go w każdym z użytkowników/rozmowach, które ma z użytkownikiem: recipientUid, a następnie, gdy jeden z użytkowników zainicjuje czat, po prostu sprawdzając, czy jeszcze nie jest. istnieje z drugim użytkownikiem. Wygląda jednak na to, że nie jest to najlepszy projekt. jakieś pomysły? Dzięki! –