¿Qué es el flujo de Node.js?

¿Qué es una corriente?

En Node.js, Stream es una interfaz abstracta para procesar datos. Proporciona una forma eficiente de leer o escribir grandes cantidades de datos sin cargar todos los datos en la memoria a la vez.

Un flujo se puede ver como una secuencia ordenada de fragmentos de datos que se pueden transmitir uno tras otro sin esperar a que todos los datos estén listos. Los flujos pueden leer datos de una ubicación y transferirlos a otra ubicación para su procesamiento, lo que permite que los datos lleguen de forma incremental durante el procesamiento sin esperar a que todos los datos estén completamente cargados.

Los flujos en Node.js se pueden dividir en flujos legibles (Readable), flujos grabables (Writable), flujos legibles y grabables (Duplex) y flujos de transformación (Transform). Cada tipo de flujo tiene diferentes características y escenarios de uso.

Flujo legible (legible)

Una secuencia legible es una secuencia que lee datos de una fuente. Las fuentes pueden ser archivos, conexiones de red u otras fuentes de datos. Los flujos legibles proporcionan un mecanismo para obtener datos gradualmente y pueden leer datos en lotes según las necesidades reales.

Crear una transmisión legible

En Node.js, podemos leer datos creando un objeto de flujo legible. Aquí hay un ejemplo que muestra cómo crear una transmisión legible:

const fs = require('fs');

const readableStream = fs.createReadStream('file.txt');

El código anterior crea una secuencia legible que file.txtlee datos del archivo nombrado.

leer datos

Para leer datos de un flujo legible, puede datahacerlo escuchando eventos. Se activará un evento cuando haya un nuevo bloque de datos disponible data, pasando el bloque de datos como argumento.

Aquí hay un ejemplo que muestra cómo leer datos de un flujo legible:

readableStream.on('data', (chunk) => {
    
    
  console.log('接收到数据块:', chunk);
});

En el ejemplo anterior, cada vez que el flujo legible recibe una nueva porción de datos, imprimimos el contenido de esa porción.

evento final

Los flujos legibles también desencadenan endeventos para indicar que se han leído todos los datos. Podemos endrealizar algunas operaciones de limpieza en el detector de eventos o continuar con el siguiente paso.

Aquí hay un ejemplo que muestra cómo escuchar endeventos en una transmisión legible:

readableStream.on('end', () => {
    
    
  console.log('数据读取完毕');
});

En el ejemplo anterior, cuando el flujo legible haya leído todos los datos, endse activará un evento y se imprimirá la información correspondiente.

Flujo grabable (Escribible)

Una secuencia grabable es una secuencia que escribe datos en una ubicación de destino. La ubicación de destino puede ser un archivo, una conexión de red u otra ubicación de almacenamiento de datos. Los flujos grabables proporcionan un mecanismo para escribir datos de forma incremental, fragmento por fragmento, según sea necesario.

Crear flujo de escritura

En Node.js, podemos escribir datos en una ubicación de destino mediante la creación de un objeto de flujo de escritura. Aquí hay un ejemplo que muestra cómo crear una secuencia de escritura:

const fs = require('fs');

const writableStream = fs.createWriteStream('output.txt');

El código anterior crea un flujo de escritura que escribe datos en output.txtel archivo nombrado.

Entrada de datos

Para escribir datos en un flujo grabable, use writeel método. writeEl método acepta un fragmento de datos como argumento y lo escribe en la secuencia.

Aquí hay un ejemplo que muestra cómo escribir datos en un flujo de escritura:

writableStream.write('Hello, world!');

En el ejemplo anterior, escribimos un fragmento de datos de texto en el flujo de escritura.

secuencia final

Una vez que todos los datos se han escrito en el flujo de escritura, endse debe llamar a un método para finalizar el flujo. Una vez finalizada la transmisión, no se aceptarán nuevos fragmentos.

Aquí hay un ejemplo que muestra cómo finalizar una transmisión grabable:

writableStream.end();

En el ejemplo anterior, llamamos endal método para finalizar el flujo de escritura.

Secuencias legibles y grabables (dúplex)

Una secuencia de lectura y escritura es una secuencia que puede leer y escribir datos. Implementa flujos de lectura y escritura. Los flujos de lectura y escritura son muy útiles en algunos escenarios, como las conexiones de red.

Crear una transmisión legible y escribible

En Node.js, podemos lograr un flujo bidireccional de lectura y escritura de datos mediante la creación de un objeto de flujo de lectura y escritura. Aquí hay un ejemplo que muestra cómo crear una secuencia legible y escribible:

const net = require('net');

const duplexStream = new net.Socket();

El código anterior crea un objeto de flujo legible y escribible, y usa netel módulo para crear un socket TCP (Socket).

leer y escribir datos

Un flujo de lectura y escritura puede leer y escribir datos. Podemos dataleer los datos del flujo de lectura y escritura escuchando el evento y writeescribir datos en el flujo de lectura y escritura llamando al método.

Aquí hay un ejemplo que muestra cómo leer y escribir datos en un flujo legible y escribible:

duplexStream.on('data', (chunk) => {
    
    
  console.log('接收到数据:', chunk);
});

duplexStream.write('Hello, world!');

En el ejemplo anterior, escuchamos los eventos del flujo de lectura y escritura data, y cuando hay un nuevo bloque de datos disponible, imprimimos el contenido del bloque de datos. Luego, writeescribimos un dato en el flujo de lectura y escritura a través del método.

Flujo de transformación (Transformar)

Un flujo de conversión es un flujo especial de lectura y escritura que convierte los datos de entrada antes de enviarlos. Los flujos de transformación son muy útiles en el desarrollo real, como comprimir, cifrar o analizar datos.

Crear un flujo de transformación

En Node.js, podemos implementar la conversión de datos creando un objeto de flujo de conversión. Aquí hay un ejemplo que muestra cómo crear una secuencia de transformación:

const {
    
     Transform } = require('stream');

const myTransform = new Transform({
    
    
  transform(chunk, encoding, callback) {
    
    
    // 在这里处理数据转换逻辑
    const transformedData = chunk.toString().toUpperCase();
    this.push(transformedData);
    callback();
  }
});

El código anterior crea un objeto de flujo de conversión myTransformy transformdefine la lógica de conversión de datos a través de métodos. En este ejemplo, convertimos el fragmento de entrada a mayúsculas y pushempujamos el fragmento convertido al lado legible a través de un método.

usar flujo de transición

Para transformar datos utilizando un flujo de transformación, insértelo entre los flujos de datos de entrada y salida. A medida que los datos pasan por el flujo de transformación, se procesarán transformde acuerdo con la lógica de transformación que definimos en el método.

Aquí hay un ejemplo que muestra cómo usar flujos de transformación para la transformación de datos:

const fs = require('fs');

const readableStream = fs.createReadStream('input.txt');
const writableStream = fs.createWriteStream('output.txt');

readableStream.pipe(myTransform).pipe(writableStream);

En el ejemplo anterior, creamos un flujo de lectura y un flujo de escritura. Luego, use pipeel método para insertar el flujo de conversión myTransformentre el flujo de lectura y el flujo de escritura para realizar la conversión y salida de datos.

en conclusión

Los flujos en Node.js brindan una forma eficiente de procesar grandes cantidades de datos. Los flujos legibles, los flujos grabables, los flujos legibles y grabables y los flujos de conversión tienen diferentes características y usos, y el tipo de flujo apropiado se puede seleccionar de acuerdo con las necesidades reales.

Este artículo presenta en detalle el concepto, la creación y el uso de secuencias en Node.js y proporciona los códigos de muestra correspondientes. Espero que a través de este artículo, tenga una comprensión más profunda del flujo en Node.js y pueda usar de manera flexible la capacidad del flujo para procesar datos en el desarrollo real.

Supongo que te gusta

Origin blog.csdn.net/weixin_43025343/article/details/131894952
Recomendado
Clasificación