[英]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識別會話,則可以執行以下操作:
我建議這樣做而不是某種可能計算接收字節數的用戶空間解決方案(你可能很容易做到)是因為有很多數據被庫和內核抽象化了。 內核處理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.