gpt4 book ai didi

node.js - HTTP 请求流在读取固定大小时无法触发可读

转载 作者:搜寻专家 更新时间:2023-11-01 00:45:22 24 4
gpt4 key购买 nike

我正在尝试在 Node.js 中使用新的 Streams API,但在指定固定的读取缓冲区大小时遇到​​了麻烦。

var http = require('http');
var req = http.get('http://143.226.75.100/waug_mp3_128k', function (res) {
res.on('readable', function () {
var receiveBuffer = res.read(1024);
console.log(receiveBuffer.length);
});
});

此代码将接收一些缓冲区然后退出。但是,如果我在 console.log() 行之后添加此行:

res.read(0);

...一切都好起来了。我的节目继续按预期流式传输。

为什么会这样?我该如何解决?

最佳答案

解释了here .

据我所知,通过在每个 readable 事件中只读取 1024 个字节,Node 会假设您对流缓冲区中的其余数据不感兴趣,并丢弃它。发出 read(0)(在同一事件循环迭代中)“重置”此行为。我不确定为什么进程在读取几个 1024 字节的缓冲区后退出;我可以重新创建它,但我还不明白:)

如果您没有特定理由使用 1024 字节读取,只需为每个事件读取整个缓冲区:

var receiveBuffer = res.read();

或者不使用非流动模式,而是通过使用 data/end 事件来使用流动模式:

var http = require('http');
var req = http.get('http://143.226.75.100/waug_mp3_128k', function (res) {
var chunks = [];
res.on('data', function(chunk) {
chunks.push(chunk);
console.log('chunk:', chunk.length);
});
res.on('end', function() {
var result = Buffer.concat(chunks);
console.log('final result:', result.length);
});
});

关于node.js - HTTP 请求流在读取固定大小时无法触发可读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20310710/

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