1

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}); 同じ結果になります (パイプは機能しません)。

誰でも私たちを助けることができますか?

4

1 に答える 1

0

これは0.8.0の時点で機能すると思います。0.6.11+では試していません

于 2012-06-26T03:12:49.997 に答える