Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten artykuł opisuje, jak przesyłać żądania i odpowiedzi HTTP w aplikacji Node.js function. Dowiedz się, jak włączyć streaming, przetwarzać duże ilości danych oraz obsługiwać scenariusze HTTP w czasie rzeczywistym.
Note
Strumienie HTTP wymagają modelu programowania v4. Jeśli używasz v3, zobacz przewodnik migracji do aktualizacji.
Overview
Funkcja HTTP streams ułatwia przetwarzanie dużych danych, przesyłanie odpowiedzi OpenAI, dostarczanie dynamicznych treści oraz wspieranie innych podstawowych scenariuszy HTTP. Umożliwia strumieniowe przesyłanie żądań do punktów końcowych HTTP i odbieranie odpowiedzi z tych punktów w aplikacji funkcji Node.js. Używaj strumieni HTTP w scenariuszach, w których aplikacja wymaga wymiany w czasie rzeczywistym i interakcji między klientem a serwerem za pośrednictwem protokołu HTTP. Możesz również użyć strumieni HTTP, aby uzyskać najlepszą wydajność i niezawodność aplikacji podczas korzystania z protokołu HTTP.
Wymagania wstępne
- Pakiet
@azure/functionsnpm w wersji 4.3.0 lub nowszej. - Azure Functions runtime w wersji 4.28 lub nowszej.
- Azure Functions Core Tools w wersji 4.0.5530 lub nowszej, które zawierają poprawną wersję środowiska uruchomieniowego.
Włącz strumienie
Wykonaj następujące kroki, aby włączyć strumienie HTTP w aplikacji funkcji w Azure i w projektach lokalnych:
Jeśli planujesz przesyłanie strumieniowe dużych ilości danych, zmodyfikuj ustawienie
FUNCTIONS_REQUEST_BODY_SIZE_LIMITw Azure. Domyślny maksymalny dozwolony rozmiar treści to104857600, co ogranicza rozmiar twoich żądań do około 100 MB.W przypadku tworzenia lokalnego dodaj również
FUNCTIONS_REQUEST_BODY_SIZE_LIMITdo pliku local.settings.json.Dodaj następujący kod do swojej aplikacji w dowolnym pliku dołączonym przez twoje pole główne.
const { app } = require("@azure/functions");
app.setup({ enableHttpStream: true });
Wskazówka
Używaj request.body bezpośrednio, aby jak najwięcej korzystać ze streamingu. Metody takie jak request.text() buforują całą treść i zwracają ciąg znaków, co niweczy sens przetwarzania strumieniowego.
Przykłady strumieni
Poniższy przykład pokazuje funkcję wyzwalaną przez HTTP, która odbiera dane za pośrednictwem żądania HTTP POST. Funkcja przesyła te dane strumieniowo do określonego pliku wyjściowego:
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"
};
}
}
});
Poniższy przykład pokazuje funkcję wyzwalaną przez HTTP, która przesyła zawartość pliku jako odpowiedź na nadchodzące żądania HTTP GET:
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"
};
}
}
});
Aby zobaczyć gotową do uruchomienia przykładową aplikację korzystającą ze strumieni, sprawdź ten przykład na GitHub.