在我的主页上,我有一个用户列表,我想选择并打开一个频道与其中一个聊天。
我在想是否最好使用id并控制对诸如USERID1-USERID2之类的频道的访问。
但是,当然,用户2也可以打开相同的频道,因此我想找到更易于控制的内容。
请,如果您想帮助我,请使用firebase网址/数组在JavaScript中给我一个示例。
谢谢!
处理此类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。