繁体   English   中英

具有Firebase云功能的排行榜

[英]Leaderboard with firebase cloud functions

我当前的数据库结构如下所示: 在此处输入图片说明

它基本上有一个mobile_users表和一个排在前100位的表。

我试图弄清楚如何编写一个执行每分钟执行一次的云函数,该函数使用用户名,mobile_users中的early_points更新/填充top100表并按early_points对其进行排序。

我应该在此表上添加等级字段,还是有一种方法可以基于mobile_users从asc / desc顺序对表进行排序?

我目前的功能看起来像这样

exports.dbRefOnWriteEvent = functions.database.ref('/mobile_user/{userId}/{earned_points}').onWrite(event => {
    var ref = admin.database().ref("/top100");
    ref.orderByChild("earned_points").once("value", function(dataSnapshot) {
        var i = 0;
        dataSnapshot.forEach(function(childSnapshot) {
          var r = (dataSnapshot.numChildren() - i);
          childSnapshot.ref.update({rank: r},function(error) {
              if (error != null)
                console.log("update error: " + error);
          });
          i++;
        });
    });
});

我还没有弄清楚如何告诉云功能每分钟执行一次。 我在构造这些类型的查询时遇到了麻烦。

我的功能还没有用这3个当前用户填充top100表。 如果有人能指出我正确的方向,我将不胜感激。

创建一个http请求函数来完成您的业务。

然后每分钟使用cron-job来调用您的http firebase函数: cron-job

也许您的数据库中可以有两个根节点。 类似于上面的一个,第二个节点称为页首横幅。

第二个节点可以是一个数组,其中索引反映排名,名称反映得分。

Leaderboard
           |-- [0] 
                |-- score: 5000
                |-- uid: 4zzdawqeasdasq2w1
           |---[1]
                |-- score: 4990
                |-- uid: 889asdas1891sadaw

然后,当您获得新分数时,您将更新用户的节点,然后还更新排行榜。 然后,您只需获取uid,并从用户节点中查找名称。

就像其他张贴者所说的那样,请使用HTTP Firebase Cloud Function和chron作业。

不过,我建议您使用chron作业,以保持云功能保持活动状态(查找冷启动firebase功能),而且每次用户玩游戏并生成游戏时都会发出获取请求以从前端触发云功能得分。 否则,如果您每分钟获得10次播放,并且每分钟更新一次,那么对于那些希望获得实时排行榜的玩家来说,这并不是很好的用户体验。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM