Como posso configurar o IIS no Azure para transmitir dados em partes de um aplicativo Node.js?

3

Eu tenho um aplicativo Node.js que usa Transfer-Encoding: Chunked para transmitir dados via HTTP continuamente até que o cliente se desconecte. Ao executar uma instância local do Nó, ela funciona bem, mas quando implantada em um Serviço de Aplicativo do Azure (que executa aplicativos do Nó por iisnode ) , as conexões do cliente ficam suspensas sem nunca receber dados.

A criação de log indica que o aplicativo Node está processando solicitações e transmitindo dados corretamente, mas, por algum motivo, esses dados não estão atingindo o cliente.

Aqui está um exemplo simplificado da maneira como estou transmitindo dados do 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);

Em meu arquivo de configuração iisnode.yml , defini flushResponse: true para evitar que o iisnode armazene blocos de resposta em buffer.

Meu palpite é que o IIS está tentando armazenar em buffer toda a resposta antes de enviá-la, mas não sei como desabilitar esse comportamento.

    
por Andrew Watt 13.05.2016 / 21:41

3 respostas

0

Suponho que você esteja executando o IIS na sua VM (e não faça uso do Serviço de Aplicativo do Azure).
 Este pergunta SO fornece algumas instruções sobre como desativar o buffer de resposta do IIS (também conhecido como AspBufferingOn ).

Basicamente, você precisa instalar o recurso ASP e a opção será exibida no Gerenciador do IIS (veja detalhes aqui ).

    
por 15.05.2016 / 17:47
0
on('request', function(request, response) {
    var interval = setInterval(function() {
        response.write("some data\r\n");
    }, 1000);
    request.on('close', function() {
        clearInterval(interval);
    }
}
    
por 21.05.2016 / 10:05
0

Eu tive exatamente o mesmo problema. Defina flushResponse como verdadeiro em web.config - consulte link para uma lista completa de opções.

Então, você teria a linha em web.config :

<iisnode flushResponse="true"/>
    
por 30.11.2017 / 23:45