【问题标题】:How to test nodejs concurrent Request如何测试nodejs并发请求
【发布时间】:2015-08-19 12:20:22
【问题描述】:

我想写一个简单的代码来测试nodejs收到很多请求时的并发性。

我使用 loadtest 模块来模拟使用此命令向服务器发送许多请求:

loadtest -c 10 --rps 200 http://localhost:3000/

我用 server.js 编写的简单代码:

var http = require('http');
var server = http.createServer();
var cun=0;
var step=0;       

function handleRequest(req,res) {

console.log(step++);
        while(100000000>cun){
            cun++;
        }
        cun=0;
}

server.on('request', handleRequest);
server.listen(3000);

但是请求是等到while循环结束

知道要解决这个问题我应该使用回调函数,但不知道怎么写。

【问题讨论】:

  • 您想模拟请求处理程序在返回响应之前需要一些时间吗?为此使用setTimeout
  • 感谢您的回复,我有一个 Web 应用程序,我的服务器通常会立即收到 50,0000 个请求,我想使用 nodejs 来接收、处理和响应并发请求,但是请求在队列中等待直到最后请求进程已关闭,我不知道如何处理此问题
  • 您发布的代码没有意义(一方面,您阻塞了事件循环,其次,您实际上并没有发回任何响应)。因此,也许您应该发布实际代码,或者更好地描述您想要完成的具体内容。

标签: node.js concurrency


【解决方案1】:
var http = require('http');
var url = require("url");
var server = http.createServer();

function handleRequest(req, res) {
  res.writeHead(200, { 'content-type': 'text/plain'});

var params = url.parse(request.url, true).query;
var input = params.number;

/*
1- Use input param in a algorithm and process it
2- Insert data in to the db
3- select on db and return to the client
*/  

  res.end();
}
server.on('request', handleRequest);
server.listen(3000);

问题: 所有请求都在队列中等待,直到最后一个请求进程(process-insert-select)关闭

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    相关资源
    最近更新 更多