【问题标题】:is setInterval in post request bad for server performance - expressjs发布请求中的 setInterval 对服务器性能不利 - expressjs
【发布时间】:2018-01-13 03:07:12
【问题描述】:

当用户向我的快速服务器发出发布请求时,我设置了一个时间间隔来轮询用户的 Spotify 帐户以获取播放信息。

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

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

【问题讨论】:

    标签: javascript node.js express server


    【解决方案1】:

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

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

    而且,由于您无法停止这些计时器中的任何一个,它们将永远堆积起来,即使在用户离开您的网站几天后也是如此。而且,如果给定用户不止一次访问/party,您甚至会得到重复。

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

    至少,您需要知道用户何时不再在您的网站上,以便您可以停止为他们运行的计时器并防止给定用户重复。

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

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

    【讨论】:

    • 谢谢,我将创建一个函数来清除空闲用户的这些时间间隔。如果我将轮询委托给单独的进程,节点集群是否也会有所帮助?
    • @ylin6 - 如果瓶颈是 CPU 而不是其他问题(例如网络带宽或服务器上的容量),更多进程(使用集群或使用工作队列或使用专用轮询进程)将让您扩展得更高你正在投票)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多