Node.js 读取固定大小时HTTP请求流不可读
我试图在Node.js中使用新的Streams API,但在指定固定的读取缓冲区大小时遇到了问题Node.js 读取固定大小时HTTP请求流不可读,node.js,Node.js,我试图在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.l
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);
。。。一切又好了。我的节目继续按预期播放
为什么会这样?我如何修理它?已经解释过了
据我所知,通过对每个readable
事件只读取1024个字节,节点就可以假定您对流缓冲区中的其余数据不感兴趣,并丢弃它。发出读取(0)
(在同一事件循环迭代中)“重置”此行为。不过,我不知道为什么读取了几个1024字节的缓冲区后进程会退出;我可以重新创建它,但我还不明白:)
如果没有使用1024字节读取的具体原因,只需读取每个事件的整个缓冲区:
var receiveBuffer = res.read();
或者,不要使用非流动模式,而是通过使用数据/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);
});
});
已经解释过了
据我所知,通过对每个readable
事件只读取1024个字节,节点就可以假定您对流缓冲区中的其余数据不感兴趣,并丢弃它。发出读取(0)
(在同一事件循环迭代中)“重置”此行为。不过,我不知道为什么读取了几个1024字节的缓冲区后进程会退出;我可以重新创建它,但我还不明白:)
如果没有使用1024字节读取的具体原因,只需读取每个事件的整个缓冲区:
var receiveBuffer = res.read();
或者,不要使用非流动模式,而是通过使用数据/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);
});
});
哇!这似乎是一个非常糟糕的API。希望他们在锁定到1.x之前把它清理干净。谢谢你的信息!哇!这似乎是一个非常糟糕的API。希望他们在锁定到1.x之前把它清理干净。谢谢你的信息!