Измерение трафика с помощью http-proxy node.js

Я написал небольшой обратный прокси для размещения своих приложений на том же компьютере с использованием модулей http и node-http-proxy. Например:

У меня есть:

  • прокси, работающий на порту 80

  • website1.com работает через порт 3000

  • website2.com работает через порт 3001

  • website3.com работает через порт 3002

Если я получу доступ к домену website1.com, прокси-сервер будет обслуживать содержимое с сервера, работающего на порту 3000, используя node-http-proxy.

Но теперь мне нужно измерить пропускную способность, используемую для каждого домена (как входящего/исходящего, так и исходящего).

Я пытался прослушивать события «данные» в объекте запроса, но в документации говорится, что по какой-то причине читаемые события не отправляются в IncomignMessage.

Я также написал небольшой модуль для «базового» функционала, его можно найти здесь:

https://npmjs.org/package/reproxy

См. пример/example.js.

Итак, как я могу выполнить эту меру, используя текущую настройку?


person WoLfulus    schedule 28.11.2013    source источник


Ответы (1)


Решение, которое я нашел, заключалось в установке и завершении события для объекта 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-».

person WoLfulus    schedule 29.11.2013
comment
Я написал очень похожее приложение, и оно должно мне помочь! - person Renato Gama; 29.11.2013
comment
Как я уже сказал, это не оптимальное решение, поскольку оно добавляет больше байтов из-за прокси-заголовка, но оно работает. - person WoLfulus; 29.11.2013
comment
Да конечно, вы правы. Поскольку мое приложение предназначено только для обучения (а не для производственного использования), все в порядке! - person Renato Gama; 29.11.2013