Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln beskriver hur man strömmar HTTP-förfrågningar och svar i din Node.js funktionsapp. Lär dig hur du aktiverar streaming, bearbetar stora data och hanterar realtidsscenarier med HTTP.
Anmärkning
HTTP-strömmar kräver v4-programmeringsmodellen. Om du använder v3, se migreringsguiden för uppgradering.
Overview
HTTP-strömmar-funktionen gör det enklare att bearbeta stora data, strömma OpenAI-svar, leverera dynamiskt innehåll och stödja andra kärn-HTTP-scenarier. Du kan strömma begäranden till och svar från HTTP-slutpunkter i din Node.js funktionsapp. Använd HTTP-strömmar i scenarier där din app kräver utbyte i realtid och interaktion mellan klient och server via HTTP. Du kan också använda HTTP-strömmar för att få bästa prestanda och tillförlitlighet för dina appar när du använder HTTP.
Förutsättningar
-
@azure/functionsNPM-paketversion 4.3.0 eller senare. - Azure Functions runtime version 4.28 eller senare.
- Azure Functions Core Tools version 4.0.5530 eller senare, som innehåller korrekt runtime-version.
Aktivera strömmar
Använd de här stegen för att aktivera HTTP-strömmar i funktionsappen i Azure och i dina lokala projekt:
Om du planerar att strömma stora mängder data ändrar du inställningen
FUNCTIONS_REQUEST_BODY_SIZE_LIMITi Azure. Den högsta tillåtna storleken för brödtexten som standard är104857600, vilket begränsar dina begäranden till en storlek på cirka 100 MB.För lokal utveckling lägger du även till
FUNCTIONS_REQUEST_BODY_SIZE_LIMITi filen local.settings.json.Lägg till följande kod i din app i alla filer som ingår i huvudfältet.
const { app } = require("@azure/functions");
app.setup({ enableHttpStream: true });
Tip
Använd request.body direkt för att få mest ut av streaming. Metoder som request.text() buffrar hela meddelandetexten och returnerar en sträng, vilket omintetgör syftet med strömning.
Streamexempel
Följande exempel visar en HTTP-triggad funktion som tar emot data via en HTTP POST-förfrågan. Funktionen strömmar denna data till en specificerad utdatafil:
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"
};
}
}
});
Följande exempel visar en HTTP-triggad funktion som strömmar en fils innehåll som svar på inkommande HTTP GET-förfrågningar:
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"
};
}
}
});
För en färdig exempelapp som använder strömmar, kolla in detta exempel på GitHub.