process.stdin流的可读事件和数据事件有什么区别

What are the differences between readable and data event of process.stdin stream?

本文关键字:事件 数据 什么 区别 stdin process      更新时间:2023-09-26

说我有

process.stdin.setEncoding('utf8');
var myString = '';

之间有什么区别

process.stdin.on('readable', function() {
  myString += process.stdin.read();
});

process.stdin.on('data', function(chunk) {
  myString += chunk;
});

一旦stdin是结束,如果输入字符串相同,他们就会给我相同的myString

每种方法的最佳实践是什么?感谢

它们是两个不同的API,允许您访问相同的数据块流。'readable' API是作为"Streams 2"的一部分在Node 0.10.0中引入的,因此如果您搜索它,它应该会有所帮助。问题的核心是'readable'接口允许更简单的数据管理和缓冲。

'data'示例使用chunk调用函数,您别无选择,只能处理它,否则它将永远丢失。在'readable'示例中,函数告诉数据是可用的,但您可以随时读取它。这允许底层系统知道您是否已经处理过数据,因此支持一个名为背压的概念非常简单。

例如,在网络流中,如果客户端通过TCP连接向服务器发送数据,而服务器太忙,它将接收readable事件,但它可以选择等待读取数据,直到它真正拥有处理数据的资源。通过不读取数据,流将对其进行缓冲,当缓冲区接近最大大小时,流将停止从操作系统读取数据包,以避免占用太多RAM。然后操作系统将开始丢弃数据包,由于数据包被丢弃,发送数据的客户端将降低发送数据的速度,以减少丢弃的数据包。

这在技术上都得到了旧流"V1"实现的支持,但要做到这一点要困难得多

因此,基本上,如果你期望大量数据,使用"可读"或将流设计为管道传输是一个非常好的主意,但如果你只是从终端读取数据,那么你很可能会看到零差异。