Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo descreve como processar em fluxo solicitações e respostas HTTP no seu aplicativo de funções do Node.js. Aprenda a habilitar streaming, processar grandes volumes de dados e lidar com cenários HTTP em tempo real.
Note
Streams HTTP exigem o modelo de programação v4. Se você está usando a v3, veja o guia de migração para atualizar.
Overview
O recurso de streams HTTP facilita o processamento de grandes volumes de dados, o streaming de respostas OpenAI, a entrega de conteúdo dinâmico e o suporte a outros cenários principais do HTTP. Permite transmitir solicitações e respostas de pontos de extremidade HTTP no seu aplicativo de funções Node.js. Use fluxos HTTP nos cenários em que seu aplicativo requer intercâmbio e interação entre cliente e servidor por HTTP em tempo real. Você também pode usar fluxos HTTP para obter o melhor desempenho e confiabilidade para seus aplicativos quando usar HTTP.
Pré-requisitos
- O pacote npm do
@azure/functionsversão 4.3.0 ou posterior. - Azure Functions runtime versão 4.28 ou posterior.
- Azure Functions Core Tools versão 4.0.5530 ou posterior, que contém a versão correta em tempo de execução.
Habilitar fluxos
Use estas etapas para habilitar fluxos HTTP em seu aplicativo de funções em Azure e em seus projetos locais:
Se você planeja transmitir grandes quantidades de dados, modifique a configuração
FUNCTIONS_REQUEST_BODY_SIZE_LIMITem Azure. O tamanho máximo padrão permitido é104857600, o que limita suas solicitações a um tamanho de cerca de 100 MB.Para o desenvolvimento local, adicione também
FUNCTIONS_REQUEST_BODY_SIZE_LIMITao arquivo local.settings.json.Adicione o código a seguir ao seu aplicativo em qualquer arquivo incluído por seu campo principal.
const { app } = require("@azure/functions");
app.setup({ enableHttpStream: true });
Dica
Use request.body diretamente para obter o máximo benefício do streaming. Métodos como request.text() armazenam em buffer o corpo inteiro e retornam uma cadeia de caracteres, o que anula o propósito do streaming.
Exemplos de fluxos
O exemplo a seguir mostra uma função ativada por HTTP que recebe dados por meio de uma requisição HTTP POST. A função transmite esses dados para um arquivo de saída especificado:
const { app } = require("@azure/functions");
const fs = require("fs");
const path = require("path");
app.http("httpTriggerStreamRequest", {
methods: ["POST"],
handler: async (request, context) => {
context.log("HTTP trigger function processed a request.");
if (!request.body) {
return {
status: 400,
body: "Request body is required"
};
}
// Create a writable stream to a file
const outputPath = path.join(__dirname, "streamed-output.txt");
const writeStream = fs.createWriteStream(outputPath);
try {
// Stream the request body to the file
const reader = request.body.getReader();
let done = false;
while (!done) {
const { value, done: readerDone } = await reader.read();
done = readerDone;
if (value) {
writeStream.write(value);
}
}
writeStream.end();
return {
status: 200,
body: "Data successfully streamed to file"
};
} catch (error) {
context.log.error("Error streaming data:", error);
return {
status: 500,
body: "Error processing stream"
};
}
}
});
O exemplo a seguir mostra uma função HTTP acionada que transmite o conteúdo de um arquivo como resposta a solicitações HTTP GET recebidas:
const { app } = require("@azure/functions");
const fs = require("fs");
const path = require("path");
app.http("httpTriggerStreamResponse", {
methods: ["GET"],
handler: async (request, context) => {
context.log("HTTP trigger function processed a request.");
const filePath = path.join(__dirname, "sample-data.txt");
try {
// Check if file exists
if (!fs.existsSync(filePath)) {
return {
status: 404,
body: "File not found"
};
}
// Create a readable stream from the file
const readStream = fs.createReadStream(filePath);
return {
status: 200,
headers: {
"Content-Type": "text/plain",
"Transfer-Encoding": "chunked"
},
body: readStream
};
} catch (error) {
context.log.error("Error streaming file:", error);
return {
status: 500,
body: "Error streaming file"
};
}
}
});
Para um aplicativo de exemplo pronto para rodar que usa streams, confira este exemplo no GitHub.