NodeJS服务器针对队列

时间:2017-01-13 16:41:24

标签: node.js http server

请参阅此示例node.js代码:

const http = require('http');

const server = http.createServer(function (req, res) {
    if (req.url === '/loop') {
        console.log('LOOP');
        while (true) {}
    }
    res.write('Hello World');
    res.end();
});

server.listen(3000);

在我的脚本中,每个请求需要3到5秒来处理。 while (true) {}就是例如。

但是,这里的nodejs在处理一个请求时没有处理另一个请求。

我想同时运行多个请求。但是,服务器一次只运行一个请求。

注意:我不想为每个请求打开群集或child_process。因为nodejs需要另一个65 ms来启动集群或child_process。

1 个答案:

答案 0 :(得分:0)

当您创建服务器(并侦听)时,nodejs会创建一个处理请求的事件循环,您将无法在其中使用无限循环,因为它将阻止运行服务器的事件循环。

我希望你不是在处理无限循环,而是需要时间的某个过程,因为你使用了async之类的模块 在request / res功能块中使用像这样的异步模块,

async.map(['param1','param2','param3'], task, function(err, results) {
    // results of task function
});

它的作用是它将利用已经运行的eventloop并运行该进程。

指向要点

  1. 大多数Javascript VM都是单线程的(包括NodeJS),因此您也可以使用setTimeout函数而不是无限循环
  2. 您将无法在NodeJS中创建线程,而是使用任何基于进程的解决方案,如集群或子进程(单线程VM)