哪个node.js HTTP代理实现更高效?

Mar*_*ark 2 benchmarking proxy http stream node.js

以下哪个node.js HTTP代理实现更具性能?

第一个实现是:

var http = require('http');

http.createServer(function(request, response) {
  var proxy = http.createClient(80, "google.com")
  var proxy_request = proxy.request(request.method, request.url, request.headers);
  proxy_request.addListener('response', function (proxy_response) {
    proxy_response.addListener('data', function(chunk) {
      response.write(chunk, 'binary');
    });
    proxy_response.addListener('end', function() {
      response.end();
    });
    response.writeHead(proxy_response.statusCode, proxy_response.headers);
  });
  request.addListener('data', function(chunk) {
    proxy_request.write(chunk, 'binary');
  });
  request.addListener('end', function() {
    proxy_request.end();
  });
}).listen(8080);
Run Code Online (Sandbox Code Playgroud)

第二个使用stream.pipe(),它就像:

var http = require('http');

http.createServer(function(request, response) {
  var proxy = http.createClient(80, "google.com");
  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);
  });

  request.pipe(proxy_request);
}).listen(8080);
Run Code Online (Sandbox Code Playgroud)

the*_*ejh 5

如果文件很大且客户端连接速度很慢,或者上传的文件太大而服务器上传带宽很小,则第一个可能会炸毁您的进程.使用pipe,它是专为这种东西设计的.

另外,使用npm中的现有模块: