Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用node.js http代理测量流量_Javascript_Node.js_Bandwidth_Http Proxy_Node Http Proxy - Fatal编程技术网

Javascript 使用node.js http代理测量流量

Javascript 使用node.js http代理测量流量,javascript,node.js,bandwidth,http-proxy,node-http-proxy,Javascript,Node.js,Bandwidth,Http Proxy,Node Http Proxy,我编写了一个小型反向代理,用于使用http和节点http代理模块在同一台计算机上托管我的应用程序。例如: 我有: 代理在端口80上运行 website1.com在端口3000上运行 website2.com在端口3001上运行 website3.com在端口3002上运行 如果我访问website1.com域,代理将使用节点http代理为运行在端口3000上的服务器提供内容 但现在我需要测量每个域使用的带宽(传入/传出,或至少传出) 我尝试在请求对象上侦听“数据”事件,但在文档中,他们说由于

我编写了一个小型反向代理,用于使用http和节点http代理模块在同一台计算机上托管我的应用程序。例如:

我有:

  • 代理在端口80上运行

  • website1.com在端口3000上运行

  • website2.com在端口3001上运行

  • website3.com在端口3002上运行

如果我访问website1.com域,代理将使用节点http代理为运行在端口3000上的服务器提供内容

但现在我需要测量每个域使用的带宽(传入/传出,或至少传出)

我尝试在请求对象上侦听“数据”事件,但在文档中,他们说由于某种原因,IncomignMessage上不会发出可读事件

我也为“基本”功能编写了一个小模块,可以在这里找到:

参见example/example.js


那么,我如何使用当前设置来完成此测量呢

我找到的解决方案是在RoutingProxy对象上设置和“end”事件,并在事件回调中获取套接字信息

var proxy = new require('http-proxy').RoutingProxy();

proxy.on('end', function(req, res, response) {

    var host = req.headers.host;
    var bytesIn = response.socket._bytesDispatched;
    var bytesOut = response.socket.bytesRead;

    console.log('request to ' + host);
    console.log('request:  ' + bytesIn + ' bytes.');
    console.log('response: ' + bytesOut + ' bytes.');

});

请注意,这不是最佳解决方案,因为请求大小包括反向代理添加的头,例如“x-”头。

我已经编写了一个非常类似的应用程序,这是honna help me!正如我所说的,这不是最佳的解决方案,因为它会因为代理标头而添加更多的“字节”,但它确实有效。是的,你是对的。因为我的应用程序只是用于学习(而不是用于生产),所以没关系!