读取一个ReadableStream并指定一个大小参数:为什么state.highWaterMark总是作为大小传递给._read()?

在Node.js中,我有一个可读的stream:

var rs = new (require('stream').Readable); rs._read = function(size) { // Implementation. } 

这个stream在这个HTTP服务器实例中被读取:

 var http = require('http'); var server = http.createServer(function(req, res) { var size = require('url').parse(req.url, true).query.size; if (size) { rs.pipe(res); rs.read(parseInt(size)); } res.end(''); }); server.listen(3001, function() { console.log('Listening on 3001'); }); 

现在,当我curl localhost:3001/?size=n ,其中n是任何整数,在rs._read(size)总是16384! 这个数字是stream的state.highWaterMark的默认值,因为rs._read()被调用为this._read(state.highWaterMark);lib/_stream_readable.js 。 任何人都可以解释吗? 如果不使用它, size参数的意义是什么?

谢谢。

看起来这只是stream的highWaterMark ,而不是巧合的默认size 。 在这里阅读更多

 var stream = require("stream"); var rs = new stream.Readable(); { _readableState: { highWaterMark: 16384, buffer: [], length: 0, pipes: null, pipesCount: 0, flowing: false, ended: false, endEmitted: false, reading: false, calledRead: false, sync: true, needReadable: false, emittedReadable: false, readableListening: false, objectMode: false, defaultEncoding: 'utf8', ranOut: false, awaitDrain: 0, readingMore: false, decoder: null, encoding: null }, readable: true, domain: null, _events: {}, _maxListeners: 10 } 

我认为这是不对的

 rs.read(size).pipe(res); 

这是因为根据文档 , rs.read(size)返回一个缓冲区,一个string或null 。 但是, pipe()Readable一种方法。 你应该可能正在使用

 rs.pipe(res); rs.read(size);