2

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

我有:

  • 代理在 80 端口上运行

  • website1.com在端口 3000 上运行

  • website2.com在端口 3001 上运行

  • website3.com在端口 3002 上运行

如果我访问website1.com域,代理将使用node-http-proxy从运行在端口 3000 上的服务器提供内容。

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

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

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

https://npmjs.org/package/reproxy

请参阅示例/example.js

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

4

1 回答 1

0

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

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-”标头。

于 2013-11-29T07:18:38.157 回答