我们如何在5秒内使用服务器代码执行10个请求?

时间:2016-07-23 03:16:11

标签: java node.js multithreading performance asynchronous

问题:想象你有一个查询。它需要5秒钟才能解决。您的用户希望请求您的api(/ test)获取查询结果。他们同时请求你的api。因此,如果用户数为10,则第10个用户将等待50秒以获得响应。他们怎么能在5s做?

每种编程语言都可以。

使用nodejs的示例代码:

var express = require('express');
var app = express();
app.get('/', function (req, res) {
  res.send('Hello World!');
});

var query = function(){
  var timeA=new Date();
  var timeB=new Date();
  var timeC=new Date();
  var time=0;
  console.log('test',timeB.getTime()-timeA.getTime());
  while(timeB.getTime()-timeA.getTime()<5000){
    timeB=new Date();
    if(timeB.getTime()-timeC.getTime()>100){
      console.log(time++);
      timeC=new Date();
    }
  }
  return time;
};

app.get('/test', function (req, res) {
  res.send('finish with time '+query());
});

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

2 个答案:

答案 0 :(得分:1)

如果您想进行一些负载测试,可以使用:

两者都可以在X秒内对你的REST api做X请求并给你一些统计数据。

答案 1 :(得分:0)

从您的问题中不清楚请求是否发送任何使请求唯一的参数。如果它们都发出相同的请求(没有参数或相同的参数),您的代码可以检查以下内容:

  1. 收到请求时:检查是否有其他正在进行的查询将回答新查询。如果是,请将此请求者添加到队列中,但不要重新提交查询。

  2. 完成查询计算后,将结果回复给所有进行相同查询的请求者(来自上面第1项中的队列)。

  3. 这种方法有意义吗?