Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Este artículo describe cómo transmitir solicitudes y respuestas HTTP en tu aplicación de Node.js función. Aprende a habilitar el streaming, procesar grandes cantidades de datos y manejar escenarios HTTP en tiempo real.
Note
Los flujos HTTP requieren el modelo de programación v4. Si usas la v3, consulta la guía de migración para actualizar.
Overview
La función de flujos HTTP facilita el procesamiento de grandes cantidades, el streaming de respuestas de OpenAI, la entrega de contenido dinámico y el soporte de otros escenarios clave de HTTP. Permite transmitir solicitudes y respuestas desde puntos de conexión HTTP en la aplicación de funciones de Node.js. Use flujos HTTP en escenarios en los que la aplicación requiera intercambio en tiempo real e interacción entre el cliente y el servidor a través de HTTP. También puede usar secuencias HTTP para obtener el mejor rendimiento y confiabilidad para las aplicaciones cuando se usa HTTP.
Prerequisites
- El paquete npm
@azure/functionsversión 4.3.0 o posterior. - Azure Functions runtime versión 4.28 o posterior.
- Azure Functions Core Tools versión 4.0.5530 o posterior, que contiene la versión correcta en tiempo de ejecución.
Habilitación de secuencias
Siga estos pasos para habilitar flujos HTTP en la aplicación de funciones en Azure y en los proyectos locales:
Si planea transmitir grandes cantidades de datos, modifique la configuración de
FUNCTIONS_REQUEST_BODY_SIZE_LIMITen Azure. El tamaño máximo permitido por defecto es104857600, lo que limita tus solicitudes a unos 100 MB.Para el desarrollo local, agregue también
FUNCTIONS_REQUEST_BODY_SIZE_LIMITal archivo local.settings.json.Agregue el código siguiente a la aplicación en cualquier archivo incluido en el campo principal.
const { app } = require("@azure/functions");
app.setup({ enableHttpStream: true });
Sugerencia
Utiliza request.body directamente para aprovechar al máximo la transmisión en tiempo real. Métodos como request.text() almacenan en búfer todo el cuerpo y devuelven una cadena, lo que anula el propósito del streaming.
Ejemplos de flujos
El siguiente ejemplo muestra una función activada por HTTP que recibe datos a través de una solicitud HTTP POST. La función transmite estos datos a un archivo de salida 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"
};
}
}
});
El siguiente ejemplo muestra una función activada por HTTP que transmite el contenido de un archivo como respuesta a las solicitudes HTTP GET entrantes:
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 una aplicación de ejemplo lista para ejecutar que utiliza flujos, echa un vistazo a este ejemplo en GitHub.