Node.js快速块
我的问题是,我计划使用express将我接收的所有请求缓存一段时间,直到我一次发送所有响应为止。 但不幸的是,在我回应第一个请求之前,我无法收到第二个请求。所以我猜node/express某种程度上阻碍了其他请求的进一步处理 我为您建立了一个最小的工作示例,这样您就可以更好地了解我所说的内容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
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上调用URLlocalhost:3000/hello.txt
即可发送请求。因此,当我打开两个选项卡并同时单击“发送”时,控制台将打印Push
(9秒后)send
Push
(9秒后)send
。。。所以我估计这意味着第二个请求被阻止,直到express响应第一个请求one@XuYin这似乎不是一个答案,但它解决了问题。他的问题与他的问题无关,所以解决办法也是一样的。