

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Scrittura di funzioni Lambda abilitate allo streaming delle risposte
<a name="config-rs-write-functions"></a>

La scrittura del gestore per le funzioni di streaming delle risposte è diversa dai modelli di gestore tipici. Quando scrivi funzioni di streaming, assicurati di completare le seguenti operazioni:
+ Completa la funzione con il decoratore `awslambda.streamifyResponse()`. L'oggetto globale `awslambda` è fornito dall'ambiente di runtime Node.js di Lambda.
+ Termina il flusso in modo corretto per assicurarti che tutta l'elaborazione dei dati sia completa.

## Configurazione di un gestore delle funzioni per lo streaming delle risposte
<a name="config-rs-write-functions-handler"></a>

Per indicare al runtime che Lambda deve trasmettere in streaming le risposte della funzione, è necessario racchiudere la funzione con il decoratore `streamifyResponse()`. Questo indica al runtime di utilizzare il percorso logico corretto per lo streaming delle risposte e consente alla funzione di trasmettere le risposte.

Il decoratore `streamifyResponse()` accetta una funzione che accetta i seguenti parametri:
+ `event`: fornisce informazioni sull'evento di chiamata dell'URL della funzione, ad esempio il metodo HTTP, i parametri della query e il corpo della richiesta.
+ `responseStream`: fornisce un flusso scrivibile.
+ `context`: fornisce i metodi e le proprietà con informazioni sulla chiamata, sulla funzione e sull'ambiente di esecuzione.

L'oggetto `responseStream` è un [`writableStream` Node.js](https://nodesource.com/blog/understanding-streams-in-nodejs/). Come con qualsiasi flusso di questo tipo, dovresti usare il metodo `pipeline()`.

**Nota**  
L'oggetto globale `awslambda` viene fornito automaticamente dal runtime Node.js di Lambda e non è richiesta alcuna importazione.

**Example gestore abilitato allo streaming delle risposte**  

```
import { pipeline } from 'node:stream/promises';
import { Readable } from 'node:stream';

export const echo = awslambda.streamifyResponse(async (event, responseStream, _context) => {
  // As an example, convert event to a readable stream.
  const requestStream = Readable.from(Buffer.from(JSON.stringify(event)));

  await pipeline(requestStream, responseStream);
});
```

Sebbene `responseStream` offra il metodo `write()` per scrivere sul flusso, ti consigliamo di utilizzare [https://nodejs.org/api/stream.html#streampipelinesource-transforms-destination-callback](https://nodejs.org/api/stream.html#streampipelinesource-transforms-destination-callback)laddove possibile. L'utilizzo di `pipeline()` garantisce che il flusso scrivibile non venga sopraffatto da un flusso leggibile più veloce.

## Terminazione dello streaming
<a name="config-rs-write-functions-end"></a>

Assicurati di terminare correttamente il flusso prima che torni al gestore. Il metodo `pipeline()` gestisce questo aspetto automaticamente.

Per altri casi d'uso, chiama il metodo `responseStream.end()` per terminare correttamente un flusso. Questo metodo segnala che nel flusso non devono essere scritti altri dati. Questo metodo non è necessario se si scrive nel flusso con `pipeline()` o `pipe()`.

A partire da Node.js 24, Lambda non attende più che le promesse non risolte vengano completate dopo il ritorno del gestore o il termine del flusso di risposta. Se la tua funzione dipende da operazioni asincrone aggiuntive, come timer o recuperi, dovresti inserirle nel tuo gestore. `await`

**Example Esempio di terminazione di un flusso con pipeline()**  

```
import { pipeline } from 'node:stream/promises';

export const handler = awslambda.streamifyResponse(async (event, responseStream, _context) => {
  await pipeline(requestStream, responseStream);
});
```

**Example Esempio di terminazione di un flusso senza pipeline()**  

```
export const handler = awslambda.streamifyResponse(async (event, responseStream, _context) => {
  responseStream.write("Hello ");
  responseStream.write("world ");
  responseStream.write("from ");
  responseStream.write("Lambda!");
  responseStream.end();
});
```