post post请求中的setInterval对服务器性能不好 - expressjs

时间:2018-01-13 03:07:13

标签: javascript node.js express server

我设置了一个时间间隔,以便在用户的Spotify帐户向我的快速服务器发送请求时,轮询用户的Spotify帐户。

app.post('/party', _ensureAuthenticated, function(request, response) {
  const token = decrypt(request.user.encryptedAccessToken);
  setInterval( () => {
    pollSpotify(token)
  }, pollInterval);
});

我的问题是,如果多个用户针对不同的帐户发布此帖子请求,在快速服务器上设置多个间隔,这会降低我的服务器性能吗?如何加班清除这些间隔?什么是从我的快递服务器轮询spotify的更好方法?

1 个答案:

答案 0 :(得分:2)

  

这会降低我的服务器性能吗?

是的,构建越来越多的setInterval()计时器最终会影响您的服务器性能。它对服务器的影响程度取决于pollInterval是什么以及每个间隔必须处理多少以及您拥有多少计时器。

而且,由于您无法阻止其中一个计时器,因此即使用户离开您的网站几天,它们也会永远堆积起来。并且,如果给定用户他们不止一次访问/party,您甚至会获得重复项。

为了建议更好的设计,我必须了解您在pollSpotify(token)中所做的事情以及您在那里找到的结果所做的事情。

至少,您需要能够知道用户何时不在您的网站上,这样您就可以停止为其运行的计时器,并防止给定用户重复。

如果您只有一个轮询计时器来运行所有轮询并且它代表活动的用户/令牌数组中的每个项目进行检查,那么它将更具可伸缩性。然后,您可以在用户请求时添加/删除数组中的项目,或者将其作为非活动状态超时。

当然,您需要知道用户何时不再在您的网站上有效,以便您可以代表他们停止投票。