簡體   English   中英

測量React Native應用程序中Web套接字使用的帶寬

[英]Measure bandwidth used by web socket in React Native app

在我們的應用程序中,員工使用手機記錄企業內的活動。 他們最終平均每月使用0.5GB-2GB數據。

我正在嘗試在我們的應用程序中構建功能,記錄數據使用情況,以便我們可以以費用索賠的形式將其發送回業務。

在下面的示例代碼中,如何確定通過WebSocket發送消息的設備使用了多少帶寬/數據?

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

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

假設您可以通過唯一IP識別客戶端會話(只是會話,他們並不總是需要此IP),我建議利用更適合您應用的低級工具,特別是NetFlow收集器。

NetFlow通過在一個時間片上記錄IP src,dst和吞吐量來測量TCP'會話'。 您可以在Linux內核中或直接在某些網絡設備中啟用它。 然后,您將需要一個程序來收集和存儲數據。

假設您啟用了NetFlow集合並且可以通過IP識別會話,則可以執行以下操作:

  1. 在會話開始時記錄時間,用戶ID和IP地址
  2. 使用此數據,您可以查詢NetFlow日志並獲得吞吐量

我建議這樣做而不是某種可能計算接收字節數的用戶空間解決方案(你可能很容易做到)是因為有很多數據被庫和內核抽象化了。 內核處理TCP堆棧(包括重新發送丟失的數據包),庫處理TLS握手/加密以及WebSocket握手。 所有這些數據都計入用戶使用的數據。 用戶如何使用該應用程序將影響這些開銷數據的發送量(不斷打開/關閉它與打開它)。

取決於您需要的精度。 最簡單的方法是通過以下方式“子類化”現有套接字:

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

簡單而且幾乎沒有任何成本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM