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 回答