【问题标题】:firebase-queue, there is a delay in the rate at which the worker receives taskfirebase-queue,工作人员接收任务的速率存在延迟
【发布时间】:2017-01-14 05:05:28
【问题描述】:

我像这样将 100 个任务推送到客户端的队列中。

var ref = firebase.database().ref('queue/tasks');
for(var i = 0;i<100;i++){
 ref.push({'foo': 'bar',i:i})
};

在服务器上,我的工人看起来像这样

var queue = new Queue(ref, function(data, progress, resolve, reject){
  console.log(data);
  resolve();
}

问题是完成处理所有任务大约需要 60 秒,这太慢了。有什么方法可以让我的员工更快地接收任务。我想为我的客户端使用队列向服务器发送请求。但是以目前队列的速度,我将无法支持很多并发用户。我希望支持 50k 并发用户。

【问题讨论】:

    标签: javascript firebase firebase-realtime-database firebase-queue


    【解决方案1】:

    我注意到的一件事是您没有传入任何选项,您可以设置多个工作人员同时从您的队列中拉取。

    options = {
      'numWorkers': 5,
      'sanitize': false,
      'suppressStack': true,
    }    
    var queue = new Queue(ref, options, function(data, progress, resolve, reject){
      console.log(data);
      resolve();
    })
    

    但是,虽然我确实注意到我的机器上的速度有所提高,但我的进程在 1 个工作人员的情况下在大约 9 秒内运行了 100 个,但在 5 个并发工作人员的情况下,它在大约 5 秒内完成。

    我使用的是配备 i7 芯片的全新 13 英寸 MacBookPro。

    我在设置队列之前使用 performance-now 来执行我的基准测试:

    var start = now();
    

    这在队列中的 resolve() 之后

    console.log(((now()-start)/1000).toFixed(3));
    

    【讨论】:

    • 与节点服务器直接服务的请求相比,100 个任务的 9 秒仍然非常高。我认为这里的限制不是工人/服务器机器,因为它接收请求的速度本身非常慢。
    • 我同意它仍然很慢,在这种规模下,我相信您需要为您的消息队列考虑其他解决方案。
    猜你喜欢
    • 2015-12-09
    • 2017-11-17
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2012-04-10
    • 2019-05-15
    相关资源
    最近更新 更多