пятница, 19 июля 2013 г.

Потоки чтения в NodeJS

Потоки чтения
Все потоки чтения должны реализовывать абстрактный класс stream.Readable.
Данный класс имеет следующую событийную модель:

Вот пример некоторых наследников данного класса

              stream.Readable
                 ^            ^
                  |             |
fs.ReadStream      http.IncomingMessage
       
 Любой наследник гарантирует, что он предоставит событийную модель родителя.

Поэтому мы можем написать следующий код
var fs = require('fs');

var stream = new fs.ReadStream(someBigFilePath);

stream.on('readable', function(){ // срабатывает каждый раз когда буферный чанк(64К) заполнен, 
  //после чего мы можем считать из этого системного чанка заболненный буфер байт.
  //когда мы разгрузим этот буфер, ОС снова готова читать следующий чанк дайт из файла, 
  //что приведет к повторному вызову этого колбека 
  var data = stream.read();
  console.log(data);
});

stream.on('end', function(){
  console.log("THE END");
});

 
Кроме того, классы наследники могут привносить дополнительные этапы в существующую событийную модель класса. Например этот же fs.ReadStream привнес вот что:
Маленькая деталь, эти классы очевидно, что наследники EventEmitter, поэтому нужно не забыть определить реакцию на stream.on('error'..., потому что в случае ошибки наши скрипты будут падать.

Комментариев нет:

Отправить комментарий