Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.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
Node.js NodeJS服务器针对队列中的每个请求运行单独的进程_Node.js_Http_Server - Fatal编程技术网

Node.js NodeJS服务器针对队列中的每个请求运行单独的进程

Node.js NodeJS服务器针对队列中的每个请求运行单独的进程,node.js,http,server,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.li

参见示例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秒<代码>而(true){}只是一个例子

但是,在这里,当一个请求正在处理时,NodeJ不处理另一个请求

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

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

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

我希望您不是在处理一个无限循环,而是一个需要时间的特定过程,因为您使用了模块,比如 在request/res功能块中,使用如下异步模块

async.map(['param1','param2','param3'], task, function(err, results) {
    // results of task function
});
它所做的是利用已经运行的eventloop并运行流程

注意事项

  • 大多数Javascript虚拟机是单线程的(包括NodeJ),因此您还可以使用
    setTimeout
    函数,而不是无限while循环
  • 您将无法在NodeJS中创建线程,而是使用任何基于进程的解决方案,如集群或childprocess(单线程虚拟机)

  • 你到底在做什么,需要3-5秒?读/写文件?请求另一台服务器?@Molda使用
    fuse.js
    进行模糊文本搜索。搜索1000多万个名字需要花费这些时间。另外,
    fuse.js
    完全同步进程。但是
    async
    模块对于同步进程没有用处。我正在运行同步进程来处理请求。通过
    sync
    您的意思是,输出可能会影响其他客户端?不,其他客户端需要等待现有进程完成。@ChandraNakka用JS VM的一些详细信息更新了答案,希望它能帮助您找到解决方案。