Javascript Nodejs一个请求阻止另一个请求
如果一个请求需要很长时间才能执行,则另一个选项卡将等待第一个请求完成。为什么?请给我解释一下。如何解决呢?这是我的代码:Javascript Nodejs一个请求阻止另一个请求,javascript,node.js,Javascript,Node.js,如果一个请求需要很长时间才能执行,则另一个选项卡将等待第一个请求完成。为什么?请给我解释一下。如何解决呢?这是我的代码: var http = require("http"); var url = require("url"); http.createServer(function(request, response) { if (url.parse(request.url).pathname == '/long') { function longlong()
var http = require("http");
var url = require("url");
http.createServer(function(request, response) {
if (url.parse(request.url).pathname == '/long')
{
function longlong()
{
var counter = 0;
var startTime = new Date().getTime();
while (new Date().getTime() < startTime + 10000)
{
counter++;
}
return counter;
}
response.writeHead(200, {"Content-Type": "text/plain"});
response.write(longlong() + '');
response.end();
}
else
{
response.writeHead(200, {"Content-Type": "text/plain"});
response.write(0 + '');
response.end();
}
}).listen(8888);
var http=require(“http”);
var url=要求(“url”);
createServer(函数(请求、响应){
if(url.parse(request.url).pathname=='/long')
{
函数longlong()
{
var计数器=0;
var startTime=new Date().getTime();
while(新日期().getTime() 因为NodeJS是单线程的(就像浏览器JavaScript一样)。它一次只能处理一个代码。我们得到了并发的错觉,因为NodeJS有非常奇特的代码块队列,这些代码块是以异步方式触发的。但是,一旦处理了块,就不能同时处理其他块
使用NodeJS时,您必须确保每个请求都结束(成功或失败),否则它可能会崩溃,超出任何帮助范围(整个服务器,而不仅仅是请求)
另外,使用process.nextTick
代替传统的循环可能会帮助您的请求更快地工作(即更具可扩展性)。良好阅读:
这篇文章的一个要点是:
…但是,除了您的代码之外,所有内容都并行运行
这意味着昂贵的I/O应该是异步的,但您的代码可能会阻塞。但是,我们担心在服务器上阻塞的I/O通常非常昂贵
有关更多详细信息,请参见另一个问题的示例:我理解这一点,但如何防止阻止另一个(简单)请求?你能给我举个例子吗?你不能!它将始终阻止所有其他请求。你到底想要实现什么?您的请求处理程序没有多大意义。它只是一个示例。在现实世界中,它从几个异步DB请求中收集数据,并对其进行处理—重新分组、计算平均值、准备显示,需要约10秒,但另一个请求正在等待此请求。我试图理解如何使用它。这种CPU密集型任务不应该在NodeJS中完成。尝试为NodeJS编写一个C插件:或者查看进程。nextTick
…但是,除了你的代码之外,所有东西都是并行运行的