【问题标题】:Express Concurrent Http Request快速并发 Http 请求
【发布时间】:2018-10-06 16:22:56
【问题描述】:

用户可以触发多个并发 HTTP 请求来表达服务器。在服务器端,我想阻止除第一个请求(针对该特定用户)之外的所有并发请求,然后执行一些操作并一个一个地取消阻止其他请求。

用户的请求不应被其他用户的请求阻止。

如何在 nodejs 中实现这一点?用户的请求可以通过 Authorization 标头来识别(唯一)。

谢谢

【问题讨论】:

  • 这绝对可以做到,但我最初的想法是这闻起来很糟糕,你应该尝试不同的方法。通过同步处理用户的请求,您到底想完成什么?
  • 'some action' 实际上是调用 API 有限制(每天点击)。阻塞不是第一个,因为第一个将缓存,其他请求将利用该数据。

标签: node.js express concurrency blocking


【解决方案1】:

有很多方法可以实现,但我能想到的最简单的是:

var blocked = {};
app.get('/bla', function(req, res){

    var id = getIdFromRequest(req);

    if (blocked[id]) // if true then another request is being served
        return res.send('Concurrent requests not allowed');

    blocked[id] = true;

    // do your thing here

    // and respond
    res.send('some data');

    // unlock the user
    delete blocked[id];
});

【讨论】:

  • 这将完全拒绝任何并发请求。我认为他们想要的是对这些请求进行排队,并在处理完之前的每个请求后一一处理。
  • 它只会拒绝来自同一用户的请求,直到第一个被响应。然后用户可以提出另一个请求。这段代码完全符合问题中指定的内容我想阻止除第一个之外的所有并发请求...
  • 那句话的后半部分是然后执行一些动作,并一一解除阻塞其他请求。仅仅因为你没有完成第一个请求就要求请求者重新发送请求是荒谬的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多