一尘不染

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

javascript

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

我在想是否最好使用id并控制对诸如USERID1-USERID2之类的频道的访问。

但是,当然,用户2也可以打开相同的频道,因此我想找到更易于控制的内容。

请,如果您想帮助我,请使用firebase网址/数组在JavaScript中给我一个示例。

谢谢!


阅读 366

收藏
2020-04-25

共1个答案

一尘不染

处理此类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);


<script src="https://getfirebug.com/firebug-lite-debug.js"></script>

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

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

如果您担心键的长度,可以考虑使用组合UID的哈希码,而不是完整的UID。

2020-04-25