Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek popisuje, jak streamovat HTTP požadavky a odpovědi ve vaší aplikaci Node.js function. Naučte se, jak povolit streamování, zpracovávat velká data a zvládat situace HTTP v reálném čase.
Poznámka:
HTTP streamy vyžadují programovací model v4. Pokud používáte v3, podívejte se na migrační průvodce pro upgrade.
Overview
Funkce HTTP streamů usnadňuje zpracování velkých dat, streamování odpovědí OpenAI, dodávání dynamického obsahu a podporu dalších základních HTTP scénářů. Umožňuje streamovat požadavky a odpovědi z koncových bodů HTTP v rámci vaší funkční aplikace Node.js. Streamy HTTP používejte ve scénářích, kdy vaše aplikace vyžaduje výměnu v reálném čase a interakci mezi klientem a serverem přes PROTOKOL HTTP. Streamy HTTP můžete použít také k zajištění nejlepšího výkonu a spolehlivosti vašich aplikací při používání protokolu HTTP.
Předpoklady
- Balíček
@azure/functionsnpm verze 4.3.0 nebo novější. - Azure Functions runtime verze 4.28 nebo novější.
- Azure Functions Core Tools verze 4.0.5530 nebo novší, která obsahuje správnou runtime verzi.
Povolení datových proudů
Pomocí těchto kroků povolíte streamy HTTP ve vaší aplikaci funkcí v Azure a v místních projektech:
Pokud plánujete streamovat velké objemy dat, upravte nastavení
FUNCTIONS_REQUEST_BODY_SIZE_LIMITv Azure. Výchozí maximální povolená velikost těla je104857600, což omezuje vaše požadavky na přibližně 100 MB.Pro místní vývoj přidejte
FUNCTIONS_REQUEST_BODY_SIZE_LIMITtaké do souboru local.settings.json.Do libovolného souboru, který je součástí hlavního pole, přidejte do aplikace následující kód.
const { app } = require("@azure/functions");
app.setup({ enableHttpStream: true });
Tip
Používejte request.body přímo, abyste ze streamování získali co největší užitek. Metody jako request.text() ukládají celou odpověď do vyrovnávací paměti a vracejí řetězec, čímž se míjí účinkem streamování.
Příklady streamů
Následující příklad ukazuje funkci spuštěnou HTTP, která přijímá data prostřednictvím HTTP POST požadavku. Funkce tato data streamuje do specifikovaného výstupního souboru:
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"
};
}
}
});
Následující příklad ukazuje funkci spuštěnou HTTP, která streamuje obsah souboru jako odpověď na příchozí HTTP GET požadavky:
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"
};
}
}
});
Pro připravenou ukázkovou aplikaci využívající streamy se podívejte na tento příklad na GitHub.