Node.js NodeJS服务器针对队列中的每个请求运行单独的进程
参见示例node.js代码: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
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并运行流程
注意事项:
setTimeout
函数,而不是无限while循环你到底在做什么,需要3-5秒?读/写文件?请求另一台服务器?@Molda使用
fuse.js
进行模糊文本搜索。搜索1000多万个名字需要花费这些时间。另外,fuse.js
完全同步进程。但是async
模块对于同步进程没有用处。我正在运行同步进程来处理请求。通过sync
您的意思是,输出可能会影响其他客户端?不,其他客户端需要等待现有进程完成。@ChandraNakka用JS VM的一些详细信息更新了答案,希望它能帮助您找到解决方案。