Назад | Перейти на главную страницу

Как настроить IIS в Azure для потоковой передачи фрагментированных данных из приложения Node.js?

У меня есть приложение 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 (см. подробности Вот).