【问题标题】:express js only accepts 5 requestsexpress js只接受5个请求
【发布时间】:2020-09-26 04:14:15
【问题描述】:

我在我的项目中使用 react 和 express,我正在从我的 react 客户端向我的 express 服务器发送请求,但是当我尝试对我的 expressjs API 执行请求时,我只能执行 5 个请求和第 6 个以及之后的请求被拒绝了

我的反应代码:

fetch('http://localhost:9000/searchprocessor', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify({
                product: {
                  Searchinput: e.target.value
                } 
            })
        });

(每次“e.target.value”更改时获取一个请求)

现在处理快递请求:

  router.post('/', function(request, response){ 

  fs.readFile('./processes/itemrequested.json', function readFileCallback(err, data, next) {
  if (err){
    console.log(err);
 } else {
 var content = JSON.parse(data); //covert it to an object


var reqproduct = request.body.product.Searchinput;
console.log("in searchprocessor requested product is: " + reqproduct);
 content.item = reqproduct;
 console.log("in searchprocessor content.item is: " + content.item);

 json = JSON.stringify(content, null, 4); //convert it back to json
 console.log(json)
 fs.writeFile('./processes/itemrequested.json', json, 'utf8', (callback) => {
  console.log("searchprocessor callback: " + callback);
  }); // write it back 
  }});
 }); 

编辑 itemrequested.json 内容的简单代码,其中包含:

{"item": ""  }

在记录变量 (reqproduct) 时,它会记录并正常工作,直到我发送第 6 个请求,例如: 发送 5 个请求,第一个包含数字 1 一直到包含数字 5 的第五个请求,然后当发送第 6 个请求(例如包含数字 6)时,服务器没有任何反应停止工作。 这是我的问题,我希望能帮到我我已经坚持了 3 天,但我找不到解决方案

【问题讨论】:

  • 没有response.send()。即使是第一次,您如何得到响应
  • @aRvi 我没有发送响应,我只是记录请求
  • 尝试发送响应并检查第 6 个请求是否有效
  • @aRvi 我明白你的意思,但我不需要,因为即使在第五个请求时停止记录,(itemrequested.json)的“项目”也只能更改 5每个请求一次
  • 您需要实际终止请求,这是因为您达到了可以拥有的待处理请求数量的限制。

标签: node.js reactjs express http


【解决方案1】:

这是由浏览器引起的。浏览器对一次向同一主机发送的请求数量有限制,超过此限制后,请求将在浏览器中排队,直到之前的请求之一完成。

每个浏览器的实现方式略有不同,但限制通常是对同一主机的大约 5 个请求。

一些网站通过实际上拥有多个映射到同一服务器的主机名并使用对不同主机名的不同请求来绕过限制来解决此问题。

在所有情况下,最好重新考虑您的 API 设计,这样您就不需要那么多请求(例如,尝试将多个请求合并为一个更大的请求)。

另外,请确保您对服务器上的每个请求都发送了正确的响应。如果您不发送响应,那么这些请求将暂停一段时间,直到最终超时。您显示的 router.post() 代码不会发送任何响应。如果您不需要任何实际响应数据,它至少需要res.send("")res.end()

【讨论】:

  • 你绝对正确,因为当我刷新浏览器时,我可以再次执行 5 个请求。非常感谢!
  • @MiladDeraawi - 看看我在回答中添加了什么。
  • @MiladDeraawi - 另请参阅我对可能部分导致您的问题的答案的最新补充。您必须向任何请求发送响应,否则它们很长一段时间都没有完成(直到它们最终超时) - 使您的问题变得更糟。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
  • 2020-12-01
  • 2018-12-26
  • 2019-11-04
  • 2011-04-28
  • 1970-01-01
相关资源
最近更新 更多