nodejs のストリームに慣れてきましたが、質問があります。
私は、可能な限り最も単純なnodejs「エコーサーバー」、つまり、リクエストストリームを介して受信したものを単純にパイプで応答ストリームに戻すサーバーだと思います。動作しますが、注意が必要です。クライアントは、送信ストリームを閉じた後にのみデータを受信します。サーバーコードは次のとおりです。
var http = require('http')
var server = http.createServer(function (req, res) {
req.pipe(res);
});
server.listen(8000);
そして、これが私がそれをテストする方法です:
以下を実行すると問題なく動作します
term1> node server.js&
term2> echo 'hello world!'|curl --no-buffer --data-binary @- 'http://localhost:8000'
hello world!
ただし、これが機能するのは、実行後に echo が出力ファイル記述子を閉じるためです。つまり、クライアントが送信を完了するまで、サーバーは何も書き込みません。
term2>
term2> yes|curl --no-buffer --data-binary @- 'http://localhost:8000'
(ここで、この行は永遠に動かなくなります)
ストリーム バッファがかなり早くいっぱいになると予想されるyes
ので、y がかなり速く戻ってくるのを見始めるでしょう。残念ながら、彼らは決してしません。
これは期待されていますか?目的の効果を得るには、ストリーム/パイプをどのように使用すればよいですか? ちなみに、出力がチャンクで返されるかどうかは気にしません...それは、ストリーム(または基礎となるファイルI / O)がバッファリングマジックを実行した結果であることを理解しています。
ご協力ありがとうございました