node.js に次の例があります。
var http = require('http');
http.createServer(function(request, response) {
var proxy = http.createClient(8083, '127.0.0.1')
var proxy_request = proxy.request(request.method, request.url, request.headers);
proxy_request.on('response', function (proxy_response) {
proxy_response.pipe(response);
response.writeHead(proxy_response.statusCode, proxy_response.headers);
});
setTimeout(function(){
request.pipe(proxy_request);
},3000);
}).listen(8081, '127.0.0.1');
この例では、127.0.0.1:8081 でリクエストをリッスンし、127.0.0.1:8083 でダミー サーバー (常に 200 OK ステータス コードを返す) に送信します。
問題は、以前に非同期モジュールがある場合 (この場合は setTimeOut タイミング)、入力ストリーム (読み取り可能) と出力ストリーム (書き込み可能) の間のパイプにあります。パイプが機能せず、8083 ポートのダミー サーバーには何も送信されません。
おそらく、パイプ呼び出しの前に非同期呼び出し (この場合は setTimeOut) があると、入力ストリームが「読み取れない」状態に変わり、非同期呼び出しの後、パイプは何も送信しません。
これは単なる例です... node.js コミュニティからのより多くの非同期モジュールでテストし、同じ結果 (ldapjs など) を得ました...
次の方法で修正を試みます。 - request.readable =true; //パイプ呼び出しの前 - request.pipe(proxy_request, {end : false}); 同じ結果になります (パイプは機能しません)。
誰でも私たちを助けることができますか?