【问题标题】:Firebase: how to get and set a global index counter?Firebase:如何获取和设置全局索引计数器?
【发布时间】:2014-04-14 06:54:24
【问题描述】:

任何人都可以帮助分析此代码在实时分布在多人之间的效果如何? 我希望所有用户都能够更新实时图表并向其发送值。

每个客户端都有一个本地计数器变量:

var count = 0;

发送值:

 $('#addValue').click(function(){
        fbValues.push({ x: count, y: randomNum(30,60)});
 });

监听要添加到 firebase 的子节点:

 fbValues.on("child_added", function(snapshot) {

        count += 1;

        var x_coor = snapshot.val().x;
        var y_coor = snapshot.val().y;

        data.values.push({ x: x_coor, y: y_coor });
        updateGraph();

    });

问题可能出在 count 的局部变量上,目前图表在大多数用例中都能正常工作,但是当很多人开始发送数据时,有时计数会变得乱序

我查找了 firebase 的交易,我可以在 firebase 上保持 total 计数准确,但我不明白这将如何帮助客户正确增加他们的计数器。

【问题讨论】:

    标签: javascript firebase firebase-realtime-database


    【解决方案1】:

    客户端可以直接调用transaction方法。

    var fb = new Firebase(URL);
    var counterRef = fb.child('counter');
    var valsRef = fb.child('values');
    
    $('#addValue').click(function(){
        counterRef.transaction(function(currentVal) {
           return (currentVal||0)+1;
        },
        function(err, success, snap) {
           fbValues.push({ x: snap.val(), y: randomNum(30,60)});
        });
    });
    

    在本地,只需在计数器路径上监听变化:

    var counter = 0;
    counterRef.on('value', function(snap) {
       counter = snap.val() || 0;
    });
    

    【讨论】:

    • 太棒了,我不知道交易成功时你可以得到状态的快照。
    • 如果同时有很多并发增量,此解决方案是否也有效? (例如数百个增量/秒)
    猜你喜欢
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 2016-06-20
    • 2017-09-12
    • 1970-01-01
    • 2020-02-28
    • 2012-06-14
    • 2016-02-07
    相关资源
    最近更新 更多