在我们的应用程序中,员工使用电话记录企业内的活动。他们最终平均每月使用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
答案 0 :(得分:6)
假定您可以通过唯一的IP识别客户端会话(只是会话,他们并不总是需要此IP),我建议您使用更适合您的应用程序的低级工具,特别是NetFlow收集器。
NetFlow通过记录一段时间内的IP src,dst和吞吐量来测量TCP“会话”。您可以在Linux内核中或直接在某些网络设备中启用它。然后,您将需要一个程序来收集和存储数据。
假设您已启用NetFlow收集并可以通过IP识别会话,则可以执行以下操作:
之所以建议我使用此方法,而不是使用某种可能对接收到的字节进行计数的用户空间解决方案(您可能会相当容易地做到这一点),是因为库和内核正在提取大量数据。内核处理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;
}
简单,几乎不花钱。