我读过有关nodejs事件循环的内容,但我不太了解的是:
- 我创建了一个简单的http服务器,将整个请求后期数据记录到文件中。
- 我使用apache-ab以700 kb文件填充它 - 每次请求它。
我想象每个请求会在事件循环中每次勾选后写一些块,但我发现完整的帖子数据在每次请求后完全写入,我不知道为什么,我无法理解。
我正在使用这样的东西
stream = require('fs').createWriteStream('path/to/log.file', {flags: 'a'})
log = function(data){
return stream.write(data)
}
require('http').createServer(function(req, res)
{
// or req.pipe(stream)
req.on('data', function(chunk){
log(chunk.toString() + "\r\n")
})
req.on('end', function(){
res.end("ok")
})
}).listen(8000)
抱歉我的英语不好:)
答案 0 :(得分:1)
我编辑了代码以输出块大小,并且还使用了一个易于识别的单词' SQUIRREL'在日志文件中搜索。我还使用curl而不是apache ab发送了图像文件,主要是因为我没有设置它。
如果你在运行它的终端中查看http的输出,你会看到处理的每个块的块大小,在我的例子中是65536(你在评论中提到我们应该看到)。在文本搜索中,我为每个处理的块看到了一次SQUIRREL这个词。
您的代码没有任何问题,希望通过这些更改可以让您了解您希望看到的内容。
stream = require('fs').createWriteStream('./logfile.txt', {flags: 'a'});
log = function(data){
return stream.write(data);
};
require('http').createServer(function(req, res)
{
// or req.pipe(stream)
req.on('data', function(chunk){
log(chunk.toString() + "SQUIRREL ");
console.log(chunk.length);
})
req.on('end', function(){
res.end("ok");
})
}).listen(8000)
curl --data-binary" @ IMAG0152.jpg" http://localhost:8000
答案 1 :(得分:1)
感谢大家的帮助,我找到了主要问题stream.write
返回错误我已添加以下代码,以便drain
和.pause()
使用.resume()
事件 问题解决了
ok = stream.write(chunk)
if ( ! ok )
{
req.pause()
stream.once('drain', function(){
req.resume()
stream.write(chunk)
})
}