問題タブ [node.js-stream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
2902 参照

javascript - トラブルシューティング エラー: nodejs ストリーム アドベンチャー チュートリアルで ECONNREFUSED を接続します

私はlearnyoujsとstream-adventureのチュートリアルに取り組んできました:

https://github.com/substack/stream-adventure

https://github.com/rvagg/learnyounode#learn-you-the-nodejs-for-much-win

最初のセットを最後までやり遂げ、2 番目のセットのほとんどを完了しましたが、奇妙なエラーが発生し続けます... 通常、それは解消されます。

コマンド/エラーは次のとおりです。

DEV/javascript/streamAdventure » stream-adventure run httpserver.js

これにより、ノードのプロセスが起動されますが、強制終了されないため、ps aux | ノードをgrepしてから、プロセスを見つけて強制終了します。

チュートリアルの「動作する」コードは次のとおりです。

nod httpserver.js を実行してから curl を実行すると、正常に動作します....だから、このエラーの原因について何か洞察を持っている人はいますか?

0 投票する
1 に答える
139 参照

javascript - 行がファイルに追加されると、単一のファイル記述子またはストリームを使用して行を検出して読み取るにはどうすればよいですか?

バックグラウンド -

node.js と fs モジュールを使用して、ファイルを監視し、ファイルに追加された行を検出するという最終目標を達成しようとしています。

現在の実装 -

私は現在、fs.watchを使用してファイルへの変更を永続的に監視し、fs.readFileを使用して監視がトリガーされたらファイルを読み取ります。

欠点 -

この実装の欠点は、特に、追加された行のみに関心があるにもかかわらず、ファイルの内容全体を読み取る必要があるため、この方法で追加された行を導出するのは計算コストが高く、時間がかかることです。

理想的なソリューション -

代わりにfs.createReadStreamを使用して、ファイルを最後まで読み取り、最後にファイル記述子を残し、ファイルが追加されたら再度読み取りを開始したいと思います。

ストリーム バッファの内容を読み取る 2 つの方法を見つけましたが、どちらの実装でもreadable.read()readable.on('data',...)が存在すると、ストリームは終了したようです。ストリームは閉じられていませんが、読み取るデータはもうありません。readable.resume()は何もしないように見えるため、終了したストリームを引き続き使用する方法が正確にはわかりません。

私の質問 -

ファイルが変更されるとトリガーされる方法で、ファイルから追加された行を読み取るにはどうすればよいですか? 私の理想的なソリューションは正しい方向に進んでいますか?

お時間をいただき、ありがとうございました。

0 投票する
1 に答える
1131 参照

node.js - 書き込み可能なストリームは終了しましたか?

Node.js で書き込み可能なストリームを実装しようとしています。SubStack の優れたストリーム ハンドブックを読んでいました。読み取りストリームが書き込みを停止したとき(push(null)を呼び出したとき)、書き込み可能なストリーム内を見つける方法があるかどうか疑問に思っていました。書き込み可能なストリームの実装が終了イベントをサブスクライブしても問題ありませんか?

0 投票する
7 に答える
65241 参照

javascript - Node.js 同じ読み取り可能なストリームを複数の (書き込み可能な) ターゲットにパイプする

同じストリームからデータを読み取る必要がある 2 つのコマンドを連続して実行する必要があります。ストリームを別のストリームにパイプした後、バッファが空になるため、そのストリームからデータを再度読み取ることができないため、これは機能しません:

リクエストはこれについて不平を言う

inputStreamを変更するとfs.createWriteStream、もちろん同じ問題が発生します。私はファイルに書き込みたくありませんが、リクエストが生成するストリーム(またはその他のもの)を何らかの方法で再利用します。

パイプが終了したら、読み取り可能なストリームを再利用する方法はありますか? 上記の例のようなことを達成するための最良の方法は何でしょうか?

0 投票する
1 に答える
1162 参照

node.js - websocket ノードを使用してコマンドを Python シェルにストリーミングする

Python シェルへの端末コマンド ライン アクセスを使用して Web アプリを構築しようとしていますが、ストリームに問題があります。

着信コマンドを Python プロセス (以下のコード) の stdin に送信する node.js/websocket サーバーがありますが、これは正常に動作しているように見えますが、何らかの理由で、着信コマンドごとに複数の応答メッセージが送信されています。たとえば、コマンド'hello world'が送信されると、複数の がクライアントに返されます ( stderr を介し'hello world'た複数のメッセージとともに)。>>>私はかなり困惑しています...クライアントからのコマンドは1つだけであることを確認したのに、なぜ多くの応答が得られるのでしょうか?

0 投票する
2 に答える
2385 参照

node.js - node.js で送信するデータがなくなったストリームを閉じるにはどうすればよいですか?

node.js を使用し、/dev/tty ファイルを開いてシリアル ポートから入力を読み取ります。コマンドを送信し、コマンドの結果を読み取ります。すべてのデータを読み取って解析したら、ストリームを閉じたいと思います。 . データマーカーの終わりまでにデータの読み取りが完了したことを知っています。ストリームを閉じると、プログラムが終了しないことがわかりました。

以下は、私が見ているものの例ですが、 /dev/random を使用してゆっくりとデータを生成しています (システムがあまり機能していないと仮定します)。私が見つけたのは、ストリームが閉じられた後にデバイスがデータを生成すると、プロセスが終了することです。

更新:1

この問題に戻って、別のサンプルがあります。これは pty を使用するだけで、ノード repl で簡単に再現できます。2 つの端末にログインし、以下の createReadStream の呼び出しでノードを実行していない端末の pty を使用します。

この時点でノードはハングアップし、終了しません。これは10.28にあります。

0 投票する
1 に答える
1412 参照

node.js - node.js http.IncomingMessage が「close」イベントを発生させない

http.IncomingMessage はいつ「close」イベントを発生させますか?

ドキュメントによると、下にある接続が閉じられたときに発生するはずです。ただし、次のコード例では呼び出されることはありません (キープアライブが原因ではないことを確認しました)。

node.js v0.10.22 を使用しています。

0 投票する
1 に答える
817 参照

javascript - nodejs から int 配列を効率的にシリアライズ (および読み取り) する

整数の配列を含む大きな (> GB) ファイルをストリーミングする必要がある nodejs でアプリケーションを構築することを検討しています。重要なのは、配列を最適にシリアル化する必要があるため、ASCII ベースではなく、理想的には小さい整数 (データの大部分になる) に 8 ビットを使用することですが、それでも大きな数値を表すことができます。

この質問はおそらくnodejs以上のものですが、nodejsでこれをどのように行うのですか? ディスクからカスタム バイト エンコーディングを使用してファイルをストリーミングするためのすぐに利用できるソリューションはありますか? それとも整数配列ですか?

理想的には、ストリームの各部分のデコードは、ssd を使用する場合でも、CPU バウンドではなくディスク バウンドである必要があります。