Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

268
Vistas
node.js - ¿Cómo ajustar el tamaño del búfer de salida estándar (también conocido como highWaterMark) de child_process.spawn ()?

Estoy intentando ajustar el tamaño del búfer ( stdout ) para la salida estándar de una llamada child_process.spawn(), y tengo dificultades para hacerlo con éxito. A continuación hay un código que ilustra lo que estoy buscando. Estoy tratando de realizar algunas evaluaciones comparativas con varios tamaños de búfer estándar, pero hasta que no pueda ajustar el tamaño del búfer, no podré hacerlo. ¡Cualquier consejo sería apreciado, gracias!

 // I'm using the `stdout` from a child_process.spawn() call to feed into another stream, and I'm having a hard time increasing the buffer size on stdout. // The code below illustrates the issue: const child_process = require('child_process'); const stream = require('stream'); const fs = require('fs'); const compressStream = child_process.spawn("cat", ["testfile_32MB"], {writableHighWaterMark: 1024*1024, highWaterMark: 1024*1024}); // <-- child_process.spawn does not have highWaterMark or writableHighWaterMark options, so including them has no effect, but I'm including it just as an illustration of what I want. compressStream.stdout.writableLength = 1024*1024; // <-- This does not help. compressStream.stdout._writableState.writableLength = 1024*1024; // <-- This does not help. compressStream.stdout._writableState.writableHighWaterMark = 1024*1024; // <-- This does not help. compressStream.stdout.writableHighWaterMark = 1024*1024; // <-- This does not help. compressStream.stdout._readableState.highWaterMark = 1024*1024; // <-- This does not help. compressStream.stdout._writableState.highWaterMark = 1024*1024; // <-- This does not help. compressStream.stdout.on("data", (data) => { console.log("data length [from spawn()]:", data.length); // <-- data.length will always be <= 64KB! How can we get it higher? }); const readStream = fs.createReadStream("testfile_32MB", {highWaterMark: 1024*1024}); readStream.on("data", (data) => { console.log("data length [from createReadStream()]:", data.length); // <-- This prints values <= 1MB, which is what I wish I had for child_process.spawn/stdout... });

Tenga en cuenta que necesitará un archivo llamado "testfile_32MB" para ejecutar este código de ejemplo, y debe tener al menos unos pocos megabytes de tamaño.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Por desgracia, no puedes hacer esto. highWaterMark es un mecanismo que se utiliza para señalar al escritor que se detenga porque el lector no está leyendo y su búfer está lleno.

Un Socket le enviará los datos tan pronto como estén disponibles. Siempre utilizará un búfer interno de 64k codificado de forma rígida. El aumento de highWaterMark lo hará capaz de contener más datos, pero aún le enviará fragmentos de 64 Kb, excepto que obtendrá ráfagas de varias llamadas por rotación de bucle de evento.

No tiene acceso a las opciones de creación de Stream cuando usa spawn ; eventualmente puede pasar un flujo de canalización con nombre preconstruido, pero esto no resolverá su problema.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda