2015-11-05 18 views
12

Ana sayfamda bir kullanıcı listesi var ve bunlardan biriyle sohbet etmek için bir kanal seçmek ve açmak istiyorum.Firebase'de Sohbet Kanallarını yönetmenin en iyi yolu

Kimlik kullanmanın en iyi yol olduğunu ve USERID1-USERID2 gibi bir kanalın erişimini denetliyorsam düşünüyorum.

Ama elbette, kullanıcı 2 aynı kanalı açabilir, bu yüzden kontrolü daha kolay bir şey bulmak isterim.

Lütfen bana yardım etmek isterseniz, bir firebase url/array kullanarak javascript'te bana bir örnek verin.

Teşekkür ederiz!

cevap

30

Böyle 1: 1 sohbet odalarını işlemenin yaygın bir yolu, kullanıcı kimliklerini temel alan kullanıcı kimliklerini oluşturmaktır. Daha önce de belirttiğiniz gibi, bununla ilgili bir sorun da, kullanıcının sohbeti başlatabilmesi ve her iki durumda da aynı odada kalmalarıdır.

Bunu, kullanıcı kimliklerini bileşik anahtarda sözcüksel olarak sıralayarak siparişi çözebilirsiniz. yerine kimlikleri kullanıcı adları ile Örnek:

Ortak bir izleme soruların

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>
Mevcut kullanıcı için sohbet odaları listesini göstermek için nasıl gibi görünüyor. Yukarıdaki kod buna hitap etmiyor. NoSQL veritabanlarında yaygın olduğu gibi, bu kullanım durumlarına izin vermek için veri modelinizi büyütmeniz gerekir. Mevcut kullanıcı için sohbet odalarının bir listesini göstermek isterseniz, verilerinizi buna izin vermek için modellemelisiniz. Bunu yapmanın en kolay yolu, veri modeline her kullanıcı için sohbet odaları listesini eklemektir:

"userChatrooms" : { 
    "Frank" : { 
    "Eusthace_Frank": true 
    }, 
    "Eusthace" : { 
    "Eusthace_Frank": true 
    } 
} 
+1

Bu eski olduğunu biliyorum, ama sadece bazı fikirler arıyordum. Kullanıcıları bir dizide oluşturarak ve sıralayarak bunu esnek hale getirebilirsiniz. Daha sonra, sadece kullanım kolaylığı sağlamak ve diğerlerinin oda isimlerini kolayca tahmin etmesini önlemek için, sadece bir MD5'i çıkarın ya da bir şekilde onu karıştırın. Bu sayede bir odadaki kullanıcı sayısını arttırabilirsiniz. Bunu bir süredir kullanıyorum ve oldukça hoş. – Eduard

+0

Puanlarınız için teşekkür ederiz. Js-sha256 modülü ile hash benim için çalıştı. 'let chatHash = SHA256 (' agent: '+ agentId +' _user: '+ userId)' –

+0

Bu mükemmel bir cevap teşekkür ederim. Ancak bu sohbet odası adının benzersiz olduğundan nasıl emin olacağınızı merak ediyorum. Özellikle daha yaygın isimler için. Sohbeti iki kullanıcı düğümünde saklasam bile 2 Frank ile sohbet edebilirim. Şu anda sadece sohbet için FB anahtarını kullanmayı düşünüyorum, her kullanıcı/konuşması ile bir kullanıcı için bir kayıt saklıyoruz: KullanıcıAdı: alıcısı ve kullanıcılardan biri bir sohbet başlattığında sadece bir tane olmadığından emin olmak için kontrol ediyor diğer kullanıcı ile var. Buna rağmen en iyi tasarım olmayabilir. Düşüncesi olan var mı? Teşekkürler! –

1

js-sha256 modülü ile Çırpı Frank van Puffelen ve Eduard yönleri ile benim için çalıştı. Her Kanal/ChatGroup (Firebase tarafından oluşturulan) benzersiz $ anahtarla kendi düğüm vardır tipik bir veritabanı şeması olarak

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

Bunu nasıl yaptığınızla ilgili daha fazla bilgi verebilir misiniz? Farklı şeyler deniyordum ve kafamı etrafına dolamıyordum. – texas697

+0

Buradaki ana nokta, ids içeren bir gönderici ve alıcı dizesi oluşturmaktır. Yani benim örneğimizde şöyle bir dizi oluşturalım: "agent: 142_user: 5346", yani aracı kimliği 142 ve kullanıcı kimliği 5346'dır. Ayrıca "user: 123_user: 312" gibi iki kullanıcı dizisini de kullanabilirsiniz. Daha sonra okunması zorlaştırmak için karma algoritması kullanıyoruz. Ve "e769925f0d2068d6280e3a61b6" gibi bir şeyi dönüştürür. Burada SHA256 kullanıyorum ama MD5, vb. Gibi farklı algoritmalar kullanabilirsiniz. –

1

. İlk olarak hangi kullanıcının kanalı açtığı önemli değildir, ancak bir kez (& karşılık gelen $ anahtar) oluşturulduğunda, bunu sadece kanal kimliği olarak kullanabilirsiniz.

Hashing/MD5 stratejisi elbette bunu yapmanın başka bir yoludur, ancak aynı zamanda bu "rota" bilgisini ve aynı düğüme $ anahtarını da saklamanız gerekir - bu da çoğaltma IMO'sudur (bir şeyleri kaçırmadığım sürece).

+0

Bence, hangi kullanıcının sohbeti başlattığı bilgisini korumak için yapıyorlar. –

+1

Bu doğru, kullanıcı isimlerini sıraladığınız karma oluşturmak için doğru, bu kanalı kimin başlattığını gerçekten bilmiyorsunuz. Bu bilgiye gerçekten ihtiyacınız varsa, chat-channel-node'unuzun altında mülk oluşturabilirsiniz. Genellikle kanalın birden fazla kullanıcısı varsa, o kanalın birisini "admin" yapmalı ve birkaç özel "güç" vermelisiniz, ancak evet, uygulamanızın ihtiyaçlarına bağlı. –

İlgili konular