在Firebase中管理聊天频道的最佳方式

Eus*_*ace 18 javascript arrays chat firebase

在我的主页面中,我有一个用户列表,我想选择并打开一个频道与其中一个聊天.

我在想如果使用id是最好的方法并控制像USERID1-USERID2这样的频道的访问.

但是当然,用户2也可以打开相同的频道,所以我想找到一些更容易控制的东西.

如果你想帮助我,请使用firebase url/array在javascript中给我一个例子.

谢谢!

Fra*_*len 42

处理此类1:1聊天室的常用方法是根据用户ID生成会议室URL.正如您已经提到的,这个问题是任何一个用户都可以发起聊天,在这两种情况下他们都应该在同一个房间里.

您可以通过在复合键中按字典顺序排序用户ID来解决此问题.例如,使用用户名而不是ID:

var user1 = "Frank"; // UID of user 1
var user2 = "Eusthace"; // UID of user 2

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);
Run Code Online (Sandbox Code Playgroud)
<script src="https://getfirebug.com/firebug-lite-debug.js"></script>
Run Code Online (Sandbox Code Playgroud)

常见的后续问题似乎是如何显示当前用户的聊天室列表.上面的代码没有解决这个问题.在NoSQL数据库中很常见,您需要扩充数据模型以允许此用例.如果要显示当前用户的聊天室列表,则应对数据建模以允许该类型.最简单的方法是为每个用户添加一个聊天室列表到数据模型:

"userChatrooms" : {
  "Frank" : {
    "Eusthace_Frank": true
  },
  "Eusthace" : {
    "Eusthace_Frank": true
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 我知道这很旧,但是,只是在寻找一些想法。您可以通过将用户放在一个数组中并对其进行排序来使其灵活。然后,为了便于使用并防止其他人轻易猜到房间名称,只需从中制作一个 MD5,或者以某种方式对其进行散列。通过这种方式,您可以扩大房间中的用户数量。我已经使用了一段时间,它非常好。 (3认同)