У меня есть приложение Node.js, которое использует Transfer-Encoding: Chunked
для непрерывной потоковой передачи данных через HTTP, пока клиент не отключится. При запуске локального экземпляра Node он работает нормально, но при развертывании в службе приложений Azure (которая запускает приложения Node через iisnode), клиентские соединения зависают без получения данных.
Ведение журнала указывает на то, что приложение Node правильно обрабатывает запросы и потоковую передачу данных, но по какой-то причине эти данные не достигают клиента.
Вот упрощенный пример того, как я передаю данные из Node:
var server = http.createServer();
server.on('request', function(request, response) {
var interval = setInterval(function() {
response.write("some data\r\n");
}, 1000);
request.on('close', function() {
clearInterval(interval);
});
});
server.listen(config.port);
В моем iisnode.yml
конфигурационный файл, который я установил flushResponse: true
чтобы iisnode не буферизовал блоки ответа.
Мой угадать заключается в том, что IIS пытается буферизовать весь ответ перед его отправкой, но я не знаю, как отключить это поведение.
У меня была точно такая же проблема. Устанавливать flushResponse
верно в web.config
- видеть https://github.com/tjanczuk/iisnode/blob/master/src/samples/configuration/web.config для полного списка вариантов.
Итак, у вас будет очередь в web.config
:
<iisnode flushResponse="true"/>
on('request', function(request, response) {
var interval = setInterval(function() {
response.write("some data\r\n");
}, 1000);
request.on('close', function() {
clearInterval(interval);
}
}
Я предполагаю, что вы используете IIS на своей виртуальной машине (и не используете службу приложений Azure).
это ТАК вопрос дает некоторые инструкции, как отключить буферизацию ответов IIS (также известную как AspBufferingOn).
В основном вам нужно установить Функция ASP и опция будет отображаться в диспетчере IIS (см. подробности Вот).