2012-08-26 73 views
6

我有一个客户端,从服务器获取JSON响应。我想计算有多少请求/响应将消耗我从Web托管公司分配的传输限额(例如,每月100GB)。如何测量客户端和服务器之间使用的网络带宽?

如何测量/计算此值?

我想我只需要测量一次,因为消息的长度和格式是一致的。

我可以控制客户端/服务器/网络。所有人都可以独一无二地致力于这项任务。客户端是IOS应用程序,服务器是PHP REST Web服务(在Windows上)。都在我的局域网上。

我对此一无所知,到目前为止只是使用strlen()获得了JSON的大小。这是否正朝着正确的方向前进?

+1

Firebug Net选项卡可以为您提供数据包大小。 –

+0

阅读这些答案我意识到我不清楚我的问题。没有涉及HTML。我在IOS设备上有一个(objective-c)应用程序,用于查询PHP Restful Web服务。我会更新这个问题。但我认为我可以为此调整答案。我现在就试试。 – Polly

+0

使用Charles代理来获取该信息 – Till

回答

2

我会建议使用Charles Proxy。它是调试通过HTTP交换的各种信息的宝贵工具。您可以使用它来跟踪来自iPhone/iPod/iPad以及模拟器的所有HTTP/s通信。

不幸的是,对于大多数Android设备来说,这并不适用,因为那些设备并不支持配置系统范围的HTTP代理。对于这些情况和非基于HTTP的通信,我会建议使用WireShark

在一些罕见的情况下,由于我仍然不清楚的原因,Charles很少在iOS设备上基于HTTP连接失败 - 一个典型的例子是GoogleAnalytics。对于那些,我再推荐WireShark。

2

JSON字符串的长度只给出传输的网络数据包中有效负载字段的大小。该数据字段可能封装在HTTP数据包中,并且在传输之前应将HTTP数据包放入IP数据包中。这些数据包中的每一个都具有有助于总传输长度的标题字段。

因此,对于一个精确的估计,您应该首先使用Wireshark或等效工具找到响应数据包的实际长度。如果这是您应用程序的唯一请求类型,您可以将带宽分配给服务器应用程序的响应大小,以获得达到限制的最大请求数。但是,如果您的Web应用程序具有多个可从客户端访问的网页,通常情况并非如此,因为任何访问(浏览)都会导致从服务器到客户端的数据传输。

1

你的Apache日志都会有每个请求的字节数,但假设你想要一个完全PHP的解决方案,将它添加到你的脚本的开头:

<?php 
    function log_input() { 
     # get raw post data 
     $length = strlen(file_get_contents('php://input')); 

     if (function_exists('apache_request_headers')) { 
      # quick, but not accurate 
      $length += strlen(serialize(apache_request_headers())); 
     } else { 
      # add fudge for HTTP/1.1 etc 
      $length += strlen($_SERVER['QUERY_STRING']) + 14; 
      foreach ($_SERVER as $k => $v) { 
       if (preg_match('/^HTTP/i', $k)) { 
        $length += strlen($k) + strlen($v); 
       } 
      } 
     } 

     $s = sprintf("%s\t%s\n", date('c'), $length); 
     file_put_contents('/tmp/input.log', $s, FILE_APPEND); 
    }   

    function log_output() { 
     $s = sprintf("%s\t%s\n", date('c'), ob_get_length()); 
     file_put_contents('/tmp/output.log', $s, FILE_APPEND); 
    } 

    log_input(); 
    register_shutdown_function('log_output'); 
    ob_start(); 

?> 
<html> .... 
相关问题