Skip to content

Cos'è uno stream?

Definizione di stream

Uno "stream" si riferisce a un flusso di dati che si verifica sequenzialmente nel tempo. Può essere considerato come una raccolta di dati che appaiono uno dopo l'altro in un certo ordine.

Esempi tipici di stream nella programmazione tradizionale

  • Dati dalla lettura di file (es. ReadableStream in Node.js)
  • Comunicazioni di rete (es. risposte HTTP)
  • Input ed eventi dell'utente (movimenti del mouse, clic, input da tastiera)

Stream in RxJS

RxJS utilizza Observable per gestire i dati che si verificano nel tempo come stream. Observable è un meccanismo per astrarre tutti i dati asincroni, dati sincroni, eventi, elaborazioni basate sul tempo, ecc. come "stream".

Vantaggi degli Observable

  • Scrittura type-safe (compatibilità con TypeScript)
  • Espressione dichiarativa del flusso di dati
  • Concatenamento di operazioni tramite pipe()
  • Sottoscrizione esplicita con subscribe()
  • Cancellazione con unsubscribe()

Confronto con stream tradizionali

CaratteristicaStream tradizionaliObservable RxJS
AmbitoTende a essere limitato a file/rete, ecc.Qualsiasi async/evento/cambio di stato
Gestione eventiGestiti singolarmente con event listenerConvertiti in stream con fromEvent
CancellazioneMetodi variGestione unificata con unsubscribe()
Composizione/TrasformazioneImplementazione individuale con codice proceduraleDescrizione concisa con operatori (map, filter, ecc.)

Relazione con Observer e Subscription

  • Observable: Fonte dei dati (sorgente dello stream)
  • Observer: Ricevitore dei dati (ha next, error, complete)
  • Subscription: Handle di controllo della sottoscrizione (sottoscrizione, cancellazione, gestione risorse)

Observable e Observer sono collegati tramite callback e controllati da Subscription.

Diagramma delle relazioni base

Il concetto di "stream", che è il cuore di RxJS, è uno strumento potente per gestire l'elaborazione asincrona. Utilizzando Observable, è possibile gestire varie fonti di dati in modo unificato e descrivere i flussi di dati in modo dichiarativo e flessibile.

Relazione con l'elaborazione degli eventi

In RxJS, anche gli eventi DOM possono essere gestiti come stream utilizzando fromEvent. Confrontando le differenze con gli event listener tradizionali, il concetto di stream diventa più chiaro.

TIP

Per un confronto tra la gestione tradizionale degli eventi e RxJS con codice reale, vedere Streaming degli eventi.

Pubblicato sotto licenza CC-BY-4.0.