У меня есть программа node.js, в которой я использую поток для записи информации на SFTP-сервер. Примерно так (упрощенный вариант):
var conn = new SSHClient();
process.nextTick(function (){
conn.on('ready', function () {
conn.sftp(function (error, sftp) {
var writeStream = sftp.createWriteStream(filename);
...
writeStream.write(line1);
writeStream.write(line2);
writeStream.write(line3);
...
});
}).connect(...);
});
Примечание. Я не использую (необязательный) аргумент обратного вызова (описанный в спецификации write() API), и я не уверен, что это может привести к нежелательному поведению (т. е. строки, написанные не в следующем порядке: строка1, строка2, строка3). Другими словами, я не знаю, следует ли использовать эту альтернативу (более сложный код и не уверен, что менее эффективен):
writeStream.write(line1, ..., function() {
writeStream.write(line2, ..., function() {
writeStream.write(line3);
});
});
(или эквивалентная альтернатива с использованием серии async())
Эмпирически в моих тестах я всегда записывал файл в нужном порядке (я имею в виду первую строку 1, затем строку 2 и, наконец, строку 3). Тем не менее, я не знаю, произошло ли это случайно или вышеизложенное является правильным способом использования write().
Я понимаю, что запись в потоке, как правило, асинхронна (как и вся работа ввода-вывода), но мне интересно, сохраняют ли потоки в node.js внутренний буфер или аналогичный, который упорядочивает данные, поэтому каждый вызов write() не возвращается пока данные не будут помещены в этот буфер.
Приветствуются примеры использования write() в реальных программах. Спасибо!