У меня есть фоновый процесс, который генерирует много вывода. Я хочу отправить вывод клиенту, как только они станут доступны. Я ожидаю, что клиент отправит HTTP-запрос GET/POST, сервер откроет соединение и keeps it alive
, затем сервер продолжит потоковую передачу данных по мере их появления.
Пример из реальной жизни. Когда вы запускаете тестовую команду или команду оболочки в AWS/Heroku/GoogleAppEngine, она показывает результат в реальном времени, как если бы команда выполнялась на моем локальном компьютере. Как они это делают?
Сервер. В этом образце сервера процесс генерирует сообщение каждую секунду.
function handleRequest (request, response) {
for (let i = 0; i < 10; i++) {
response.write('This is message.' + i)
require('child_process').execSync("sleep 1")
}
response.end()
}
Клиент. Клиент должен получать данные по мере их поступления, т. е. по одному. Но на выходе, конечно, я ожидал, все данные собираются сразу и отправляются обратно клиенту.
request.put(formData)
.on('data', function (data) {
console.log(data.toString())
})
Я новичок в NodeJS, но я надеюсь, что смогу вернуть какую-то форму
writable stream
обратно клиенту, и когда данные записываются в этот поток на стороне сервера, клиент получит их на своем конце?
response
имеет методon()
, я подумал, что отправка данных порциями с сервера будет очень простой. - person Rash   schedule 16.07.2017fs.createReadStream()
и передаю его наresponse
, а на клиенте делаюrequest.on('data', callback)
. В этом сценарии данные разбиваются на части и доставляются клиентуas they are being read
. Мой вопрос в том, как мой сценарий отличается от этого? - person Rash   schedule 16.07.2017