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

jsk*_*dd3 7 javascript networking websocket react-native

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

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

在下面的示例代码中,如何确定通过WebSocket?发送消息的设备使用了多少带宽/数据?

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

ws.onopen = () => {
  ws.send('something');
};
Run Code Online (Sandbox Code Playgroud)

Lia*_*lly 6

假设您可以通过唯一的IP标识客户端会话(只是会话,他们并不总是需要这个IP),我会建议利用水平较低的工具,更适合于您的应用程序,具体的NetFlow采集器.

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

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

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

我建议这样做而不是某种可能计算接收字节数的用户空间解决方案(你可能很容易做到)是因为有很多数据被库和内核抽象化了.内核处理TCP堆栈(包括重新发送丢失的数据包),库处理TLS握手/加密以及WebSocket握手.所有这些数据都计入用户使用的数据.用户如何使用该应用程序将影响这些开销数据的发送量(不断打开/关闭它与打开它).