1PeGaS
@1PeGaS

Как рендерятся потоки в node.js?

app.get('/stream', function(req, res) {
  var stream = fs.createReadStream(__dirname + 'text.txt')
  stream.pipe(res)
})


appa .get('/stream', function(req, res) {
var stream = fs.createReadStream(__dirname + 'text.txt')
stream.pipe(res)
})
Выполнить кодРазвернуть фрагмент
Через потоки мы частично (по кусочкам) передаём данные в res, но как эти данные отображаются в браузере постепенно? Ведь обычно res принимает данные (целиком как есть) и они отображаются в браузере (целиком).

Или например пример с картинкой:
app.get('/image', function(req, res) {
  var stream = fs.createReadStream(__dirname + 'image.png')
  stream.pipe(res)
})


Как она подкружается кусочками?

Или .js код, например, если подгрузится только одна часть кода, а вторая часть он которой зависит первая, ещё не прогрузилась и при выполнении этого .js в браузере будет ошибка.
  • Вопрос задан
  • 192 просмотра
Решения вопроса 1
ruddy22
@ruddy22
Спасение утопающих — дело рук самих утопающих
Если посмотреть на ворпос чуть шире, то можно наткнуться на информацию о MIME-types и о заголовках ответов сервера. Если коротко, то не все форматы поддерживают "потоковую" передачу данных. В основном, такой тип поддерживают некоторые видео-форматы (MP4, MOV и т.д.) и некоторые аудио-форматы (AAC и т.д.). Картинки обычно передаются целиком (как и pdf), если нет иной реализации на сервере.

Это были общие слова, теперь по вопросу. Поток, в nodejs, это абстракция, т.е. это не значит, что данные передаются потоково. За сценой `stream.pipe` находится работа с событиями `data`, `end` и другими. Т.е. мы получаем поток, подписываемся на `data` (читаем данные) и `end` (закрываем поток). Более понятный пример можно найти тут. А лучше прочитать эту книгу, где все подробно расписано.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы