Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我们如何在5秒内用服务器代码处理10个请求?_Java_Node.js_Multithreading_Performance_Asynchronous - Fatal编程技术网

Java 我们如何在5秒内用服务器代码处理10个请求?

Java 我们如何在5秒内用服务器代码处理10个请求?,java,node.js,multithreading,performance,asynchronous,Java,Node.js,Multithreading,Performance,Asynchronous,问题:想象你有一个问题。解决这个问题需要5秒钟。您的用户希望请求api(/test)以获取查询结果。它们同时请求您的api。因此,如果用户数为10,则第10个用户将等待50秒以获得响应。他们怎么能在5秒内做到 每种编程语言都可以 nodejs的示例代码: var express = require('express'); var app = express(); app.get('/', function (req, res) { res.send('Hello World!'); });

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

每种编程语言都可以

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!');
});
var express=require('express');
var-app=express();
app.get('/',函数(req,res){
res.send('helloworld!');
});
var query=function(){
var timeA=新日期();
var timeB=新日期();
var timeC=新日期();
var时间=0;
log('test',timeB.getTime()-timeA.getTime());
while(timeB.getTime()-timeA.getTime()100){
console.log(time++);
timeC=新日期();
}
}
返回时间;
};
app.get('/test',函数(req,res){
res.send('finishwithtime'+query());
});
应用程序侦听(3000,函数(){
log('示例应用程序监听端口3000!');
});

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

  • ApacheJMeter:
  • SOAPUI:(更多图形化、更多功能和配置)

两者都可以在X秒内向REST api发送X个请求,并为您提供一些统计信息。

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

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

  • 在完成查询的计算后,将结果回复到进行相同查询的所有请求者(从上面第1项中的队列)


  • 这种方法有意义吗?

    请不要截屏您的代码,只需使用格式复制/粘贴。如果您的请求实际上占用了CPU的全部负载5秒钟(这是相当罕见的),那么您所能做的就是让更多的CPU来处理更多的请求。除了让您的请求处理更加高效之外,没有什么魔法可以加快速度。但是,如果(与大多数请求一样),处理请求的大部分时间都在进行I/O,如数据库、文件、网络等,那么您可能可以通过适当的异步编程同时处理大量请求。就你现在的问题而言,它还不够明确,以至于无法真正回答。而且,这里的代码截图被认为是一种不好的做法。它们是不可搜索的,不能复制和粘贴来处理或创建答案,等等。。。将实际代码粘贴到问题中,并将其格式化为代码。感谢您的回答@jfriend00。关于我的问题,我们不需要关心假设的问题。在现实世界中,任何查询都需要一个特定的时间,所以让我们想想5s就是这个时间。但是你的建议是我的主意,多买些CPU。我们如何在nodejs或java中实现解决方案?Nodejs是单线程的。Java可以是多线程的,但我的计算机只有4个内核。我已经更改了屏幕截图。很抱歉给您带来不便。这是我第二次发帖。谢谢你的建议。很酷。让我们用你的工具进行测试并解决问题。