Да, вы можете сделать это.То, что вам нужно знать, это на самом деле кодировка передачи по частям .
Это одна из старых техник, которая использовалась десять лет назад, со времен Websockets, я не видел никого, кто бы использовал это.
Очевидно, что вам нужно отправлять ответы только в разное время, может быть, до некоторых событий будет запущено позже в чанках .На самом деле это тип ответа по умолчанию в express.js.
Но здесь есть одна загвоздка.Когда вы пытаетесь проверить это, предполагая, что вы используете современный браузер или curl, которые все они буферизуют, так что вы не увидите ожидаемого результата.Уловка заполняет буферы чанка перед отправкой последовательных чанков ответа.См. Пример ниже:
const express = require('express'),
app = express(),
port = 3011;
app.get('/', (req, res) => {
// res.write("Hello\n");
res.write("Hello" + " ".repeat(1024) + "\n");
setTimeout(() => {
res.write("World");
res.end();
}, 2000);
});
app.listen(port, () => console.log(`Listening on port ${port}!`));
Первый res.write
с дополнительными 1024 пробелами заставляет браузер рендерить чанк.Тогда ваш второй res.write
ведет себя так, как вы ожидали.Вы можете увидеть разницу с раскомментированием первого res.write
.
На уровне сети разницы нет.На самом деле даже в браузере вы можете достичь этого с помощью XHR Object (первая реализация AJAX). Вот ответ