Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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快速块_Node.js_Express_Blocking - Fatal编程技术网

Node.js快速块

Node.js快速块,node.js,express,blocking,Node.js,Express,Blocking,我的问题是,我计划使用express将我接收的所有请求缓存一段时间,直到我一次发送所有响应为止。 但不幸的是,在我回应第一个请求之前,我无法收到第二个请求。所以我猜node/express某种程度上阻碍了其他请求的进一步处理 我为您建立了一个最小的工作示例,这样您就可以更好地了解我所说的内容 var express = require('express'); var app = express(); var ca = []; app.get('/hello.txt', function(re

我的问题是,我计划使用express将我接收的所有请求缓存一段时间,直到我一次发送所有响应为止。 但不幸的是,在我回应第一个请求之前,我无法收到第二个请求。所以我猜node/express某种程度上阻碍了其他请求的进一步处理

我为您建立了一个最小的工作示例,这样您就可以更好地了解我所说的内容

var express = require('express');
var app = express();

var ca = [];

app.get('/hello.txt', function(req, res){
  ca.push(res);
  console.log("Push");
});

setInterval(function(){
  while (ca.length) {
    var res = ca.shift();
    res.send('Hello World');
    console.log("Send");
  }
},9000);

var server = app.listen(3000, function() {
  console.log('Listening on port %d', server.address().port);
});
当我只向
localhost:3000发送一个请求并等待9秒时,我可以发送第二个请求。但是,当我在不等待间隔回调的情况下发送这两个消息时,第二个消息将被阻止,直到触发第一个间隔为止

长话短说:为什么会发生这种阻塞,有什么方法可以避免这种阻塞


PS:看来默认http包显示了另一种行为

好了,我找到了解决方案

这个问题不在我的代码中,它是由Chrome引起的。Chrome似乎正在序列化所有以相同URL为目标的请求。但是,它同时发送两个请求,并且不会使用第一个请求的响应来服务第二个请求


无论如何,谢谢你的帮助

用firefox和chrome试试,以防止序列化请求…

@JonathanLonowski我现在明白了。他试图在9秒后清空整个阵列。我觉得这更像是客户的问题。我在这里没有看到任何应该阻止多个请求的内容。请求没有被对方阻止。它们只是在队列中通过
.push()
.shift()
进行管理。但是,它们可以以不同的顺序发送,可以使用
.pop()
进行发送,也可以使用索引
ca[2]直接访问@JonathanLonowski他说他们被封锁了。。。。Obatzer你能详细介绍一下你是如何发送这些请求的吗?我同意@InternalFX,请求处理在这里没有被阻止。嗨,谢谢你的支持。我现在想说得更准确些,但我想如果你在你的电脑上本地运行,我会做得更好。我只需在chrome上调用URL
localhost:3000/hello.txt
即可发送请求。因此,当我打开两个选项卡并同时单击“发送”时,控制台将打印
Push
(9秒后)
send
Push
(9秒后)
send
。。。所以我估计这意味着第二个请求被阻止,直到express响应第一个请求one@XuYin这似乎不是一个答案,但它解决了问题。他的问题与他的问题无关,所以解决办法也是一样的。