Нет, оно не будет заблокировано. node.js прочитает файл в виде фрагментов и затем отправит эти фрагменты клиенту. Между порциями он будет обслуживать другие запросы.
Чтение файлов и отправка данных по сети являются операциями, связанными с вводом / выводом. Сначала node.js попросит операционную систему прочитать часть файла, и пока ОС делает это, node.js будет обслуживать другой запрос. Когда ОС возвращается к node.js с данными, node.js сообщит ОС об отправке этих данных клиенту. Во время отправки данных node.js будет обслуживать другой запрос.
Попробуйте сами:
Создать большой файл
dd if=/dev/zero of=file.dat bs=1G count=1
Запустите приложение node.js
var http = require('http');
var fs = require('fs');
var i = 1;
http.createServer(function (request, response) {
console.log('starting #' + i++);
var stream = fs.createReadStream('file.dat', { bufferSize: 64 * 1024 });
stream.pipe(response);
}).listen(8000);
console.log('Server running at http://127.0.0.1:8000/');
Запросите http://127.0.0.1:8000/
несколько раз и наблюдайте, как node.js обрабатывает их все.
Если вы собираетесь обслуживать много больших файлов, вы можете поэкспериментировать с различными значениями bufferSize .