Измерение пропускной способности, используемой веб-сокетом в приложении React Native. - PullRequest
0 голосов
/ 22 ноября 2018

В нашем приложении сотрудники используют свои телефоны для регистрации действий в бизнесе.В итоге они в среднем используют данные объемом 0,5–2 ГБ в месяц.

Я пытаюсь встроить функциональность в наше приложение, которое регистрирует использование данных, чтобы мы могли отправить их обратно в бизнес в виде расходовпретензия.

В приведенном ниже примере кода, как я могу определить, сколько полосы пропускания / данных было использовано устройством, отправляющим сообщение через WebSocket?

var ws = new WebSocket('ws://host.com/path');

ws.onopen = () => {
  ws.send('something');
};

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Зависит от того, какая точность вам нужна.Простейшим способом было бы «подклассить» существующие сокеты чем-то вроде этого:

var inboundTraffic = 0;
var outboundTraffic = 0;

function NewWebSocket(addr) {
  var ws = new WebSocket(addr);
  var wsSend = ws.send;
  ws.send = function(data) { 
    outboundTraffic += data.length; 
    return wsSend.call(ws,data); 
  }
  ws.addEventListener("message", function (event) {
    inboundTraffic += event.data.length;
  });
  return ws;
}

Простой и почти ничего не стоит.

0 голосов
/ 26 ноября 2018

Предполагая, что вы можете идентифицировать клиентский сеанс по уникальному IP-адресу (только сеанс, им не всегда нужен этот IP-адрес), я бы порекомендовал использовать инструменты более низкого уровня, которые больше подходят для вашего приложения, в частности коллекторы NetFlow.

NetFlow измеряет TCP 'разговор' посредством записи IP src, dst и пропускной способности за интервал времени.Вы можете включить это в ядре Linux или непосредственно в сетевом оборудовании.Затем вам понадобится программа для сбора и хранения данных.

Если вы включили сбор данных NetFlow и можете идентифицировать сеансы по IP, вы можете сделать следующее:

  1. Записать время, идентификатор пользователя и его IP-адрес в начале сеанса
  2. Используя эти данные, вы можете затем запросить ваши журналы NetFlow и получить пропускную способность

Причина, по которой я предлагаю это вместо некоторыхРешение пользовательского пространства, которое может считать полученные байты (что вы, вероятно, могли бы сделать довольно легко), заключается в том, что библиотеки и ядро ​​отбирают много данных.Ядро обрабатывает стек TCP (включая повторную отправку пропущенных пакетов), библиотеки обрабатывают рукопожатия / шифрование TLS, а также рукопожатие WebSocket.Все эти данные засчитываются в используемые пользователем данные.То, как пользователи используют приложение, будет влиять на то, сколько этих служебных данных будет отправлено (постоянно открывать / закрывать, а не оставлять открытыми)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...