测量React Native应用中Web套接字使用的带宽

时间:2018-11-22 17:23:11

标签: javascript react-native networking websocket

在我们的应用程序中,员工使用电话记录企业内的活动。他们最终平均每月使用0.5GB-2GB数据。

我正在尝试在我们的应用程序中内置功能来记录数据使用情况,以便我们可以以费用索赔的形式将其发送回业务。

在下面的示例代码中,如何确定通过{% block body %} <div class="container"> {% for field in pull_requests_list %} <table> <tr> <th>{{ field.pr_project }}</th> <th>{{ field.pr_id }} </th> <th>{{ field.nd_comments }} </th> <th>{{ field.nb_added_lines_code }}</th> <th>{{ field.nb_deleted_lines_code }}</th> <th>{{ field.nb_commits }}</th> <th>{{ field.nb_changed_fies }}</th> <th>{{ field.Closed_status }}</th> <th>{{ field.reputation }}</th> <th>{{ field.Label }}</th> </tr> </table> {% empty %} <strong> There is no pull request in the database. </strong> {% endfor %} </div> {% endblock %} 发送消息的设备使用了多少带宽/数据?

WebSocket

2 个答案:

答案 0 :(得分:6)

假定您可以通过唯一的IP识别客户端会话(只是会话,他们并不总是需要此IP),我建议您使用更适合您的应用程序的低级工具,特别是NetFlow收集器。

NetFlow通过记录一段时间内的IP src,dst和吞吐量来测量TCP“会话”。您可以在Linux内核中或直接在某些网络设备中启用它。然后,您将需要一个程序来收集和存储数据。

假设您已启用NetFlow收集并可以通过IP识别会话,则可以执行以下操作:

  1. 在会话开始时记录时间,用户ID及其IP地址
  2. 使用这些数据,您可以查询NetFlow日志并获得吞吐量

之所以建议我使用此方法,而不是使用某种可能对接收到的字节进行计数的用户空间解决方案(您可能会相当容易地做到这一点),是因为库和内核正在提取大量数据。内核处理TCP堆栈(包括重新发送丢失的数据包),库处理TLS握手/加密以及WebSocket握手。所有这些数据都计入用户使用的数据。用户如何使用该应用程序将影响发送多少此类开销数据(始终打开/关闭数据还是将其保持打开状态)。

答案 1 :(得分:1)

取决于您需要的精度。最简单的方法是通过类似以下方式的“子类化”现有套接字:

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;
}

简单,几乎不花钱。