簡體   English   中英

process.stdin流的可讀和數據事件之間有什么區別?

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

說我有

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在節點0.10.0中作為“Streams 2”的一部分引入,因此如果您搜索它,它應該會有所幫助。 該問題的核心是'readable'界面允許更簡單的數據管理和緩沖。

'data'示例用一個塊調用你的函數,你別無選擇,只能處理它,否則它將永遠丟失。 'readable'示例中,該函數告訴您數據可用,但您可以隨時閱讀。 這允許底層系統知道您是否已處理數據,因此支持稱為背壓的概念非常簡單。

例如,在網絡流中,如果客戶端通過TCP連接向服務器發送數據並且服務器超級忙,它將接收readable事件,但是它可以選擇等待讀取數據,直到它實際擁有資源為止。處理數據。 通過不讀取數據,流將緩沖它,並且當緩沖區接近最大大小時,流將停止從操作系統讀取數據包以避免占用太多RAM。 然后操作系統將開始丟棄數據包,並且由於數據包被丟棄,發送數據的客戶端將降低發送數據的速度以嘗試減少數據包丟失。

舊的流“V1”實現在技術上支持這一點,但這樣做要困難得多。

所以基本上,如果你期望大量的數據,使用“可讀”或設計你的流是一個非常好的主意,但如果你只是從終端讀取數據,那么你很可能會看到零差異。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM