Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Dit artikel beschrijft hoe je HTTP-verzoeken en -antwoorden streamt in je Node.js functie-app. Leer hoe je streaming inschakelt, grote data verwerkt en realtime HTTP-scenario's afhandelt.
Note
HTTP-streams vereisen het programmeermodel v4. Als je v3 gebruikt, bekijk dan de migratiegids om te upgraden.
Overview
De HTTP-streams-functie maakt het eenvoudiger om grote data te verwerken, OpenAI-antwoorden te streamen, dynamische content te leveren en andere kern-HTTP-scenario's te ondersteunen. Hiermee kunt u aanvragen naar en antwoorden van HTTP-eindpunten streamen in uw Node.js functie-app. Gebruik HTTP-streams in scenario's waarin uw app realtime uitwisseling en interactie tussen client en server via HTTP vereist. U kunt ook HTTP-streams gebruiken om de beste prestaties en betrouwbaarheid voor uw apps te verkrijgen wanneer u HTTP gebruikt.
Prerequisites
- Het
@azure/functionsnpm-pakket versie 4.3.0 of hoger. - Azure Functions Runtime versie 4.28 of hoger.
- Azure Functions Core Tools versie 4.0.5530 of later, die de juiste runtime-versie bevat.
Streams inschakelen
Gebruik deze stappen om HTTP-streams in te schakelen in uw functie-app in Azure en in uw lokale projecten:
Als u van plan bent grote hoeveelheden gegevens te streamen, wijzigt u de instelling
FUNCTIONS_REQUEST_BODY_SIZE_LIMITin Azure. De standaard toegestane maximale grootte van de requestbody is104857600, wat uw verzoeken beperkt tot ongeveer 100 MB.Voor lokale ontwikkeling voegt u ook toe
FUNCTIONS_REQUEST_BODY_SIZE_LIMITaan het local.settings.json-bestand.Voeg de volgende code toe aan uw app in elk bestand dat is opgenomen in het hoofdveld.
const { app } = require("@azure/functions");
app.setup({ enableHttpStream: true });
Tip
Gebruik request.body direct om het meeste voordeel uit streaming te halen. Methoden zoals request.text() bufferen de volledige inhoud en geven een string terug, wat het doel van streaming tenietdoet.
Stream-voorbeelden
Het volgende voorbeeld toont een HTTP-getriggerde functie die gegevens ontvangt via een HTTP POST-verzoek. De functie streamt deze gegevens naar een gespecificeerd uitvoerbestand:
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"
};
}
}
});
Het volgende voorbeeld toont een HTTP-getriggerde functie die de inhoud van een bestand streamt als antwoord op binnenkomende HTTP GET-verzoeken:
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"
};
}
}
});
Voor een kant-en-klare voorbeeldapp die streams gebruikt, bekijk dit voorbeeld op GitHub.