gpt4 book ai didi

javascript - 如何为多用户编写node.js web?

转载 作者:行者123 更新时间:2023-11-28 19:25:15 26 4
gpt4 key购买 nike

我写了一个基本的网络服务器

如果第一个用户打开127.0.0.1/complex

第二个用户打开127.0.0.1/simple

在第一个用户完成之前,第二个用户无法查看网站

如何解决这个问题?

var http = require('http');
var url = require('url');
http.createServer(function (req, res) {

var pathname = url.parse(req.url).pathname;

res.writeHead(200, {'Content-Type': 'text/plain'});

if(pathname=='/complex')
{
console.log('complex');
complexFunction(res);
}
else if(pathname=='/simple')
{
console.log('simple');
simpleFunction(res);
}
}).listen(80, '127.0.0.1');


function complexFunction(res)
{
for(var i=0; i<9999999999; i++)
{
var complex=200000/3;
complex*=200;
}
res.end('complex');
}
function simpleFunction(res)
{
var simple=1;
res.end('simple');
}

最佳答案

node.js 是一个单线程进程,专为异步编程而设计。您的 for 循环阻塞了整个过程,您需要将其拆分并使其异步。

setImmediate() 是一种可能性。请参阅:http://nodejs.org/api/timers.html#timers_setimmediate_callback_arg

var http = require('http');
var url = require('url');
http.createServer(function (req, res) {

var pathname = url.parse(req.url).pathname;

res.writeHead(200, {'Content-Type': 'text/plain'});

if(pathname=='/complex')
{
console.log('complex');
complexFunction(res, 9999999999);
}
else if(pathname=='/simple')
{
console.log('simple');
simpleFunction(res);
}
}).listen(80, '127.0.0.1');

function complexFunction(res, i)
{
if(i >= 0)
{
i--;
var complex=200000/3;
complex*=200;

setImmediate(function() {
complexFunction(res, i)
});
} else {
res.end('complex');
}
}

function simpleFunction(res)
{
var simple=1;
res.end('simple');
}

关于javascript - 如何为多用户编写node.js web?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28004837/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com