2

フックを使用して、 node.js を使用して子プロセスを生成し、その出力を消費しています。child.stdout.on('data')

child.stdoutはそれ自体がストリームであり、ストリーム ページで、データ イベントが到着したときにハンドラーが登録されていない場合、データがフロアにドロップされることを通知する太い警告に気付きました。

子プロセスの生成と stdout ハンドラの登録の間に少し時間がかかります。 ここに競合状態はありますか? 最初の読み取りが失われることは望ましくありません。

親と子の間のパイプがバッファリングすると推測するのは合理的ですが、ノードはそれを保証しますか?

4

1 に答える 1

3

IO 操作が次に処理されるときにリスナーがそこにあることを確認するために、呼び出しと同じターン(一連のシリアル ステートメント) でchild.stdout.on('data', [...])後者を呼び出す必要があります。または、ストリームを (同じターンで) 一時停止し、後のターンでリスナーをインストールする必要がある場合は、リスナーを追加した後に後のターンで再開することもできます。child_process.spawn([...])child.stdout.pause()

于 2012-10-15T00:56:25.960 に答える