node.js - 在 NodeJS 的底层,在哪里以及如何调用 readable._read()?
问题描述
我对下面的程序非常好奇。该程序仅在消费者请求时将字母“a”到“z”(包括)推送到可读流中。我从文档中了解到_read()
实现是由内部Readable
类方法调用的。如果您使用该命令从终端运行该程序,node app.js | head -c5
那么我们可以看到_read()
当我们只请求 5 个字节时它只被调用了 5 次,因此它只打印abcde
。
我想知道这个_read()
实现在 Node 源代码中的哪个位置被调用?或者_read()
当我们请求 5 个字节的数据时,Node 源代码中的哪里被调用了 5 次?
我很想知道这一点,如果有人可以帮助我弄清楚那将是很棒的。
var Readable = require('stream').Readable;
var rs = Readable();
var c = 97 - 1;
rs._read = function () {
if (c >= 'z'.charCodeAt(0)) return rs.push(null);
setTimeout(function () {
rs.push(String.fromCharCode(++c));
}, 100);
};
rs.pipe(process.stdout);
process.on('exit', function () {
console.error('\n_read() called ' + (c - 97) + ' times');
});
process.stdout.on('error', process.exit);
解决方案
推荐阅读
- html - CSS隐藏的元素仍然占用页面空间-如何设置显示:无条件?
- r - R中的倾向得分
- java - 使用 JNA 获取服务列表
- cookies - 将密码哈希保存在 cookie 中以进行授权是个好主意吗
- javascript - React-native 版本未匹配尝试了堆栈溢出和其他平台上可用的所有解决方案
- c# - 如何从本地 HTML 文件获取更新的内容以显示在 UWP 应用程序的 WebView 中?
- dart - CupertinoSliverNavigationBar largeTitle 多行
- android - 如何暂时禁用屏幕上的所有触摸并再次启用它
- nginx - 使用 nginx 将 www 重定向到非 www godaddy
- ios - 让 WKWebView 覆盖整个屏幕