2012-08-26 16 views
6

私は、サーバーからJSON応答を得るクライアントを持っています。ウェブホスティング会社から割り当てられた譲渡手当を消費するリクエスト/レスポンスの数(たとえば、100 GB /月)を計算したいクライアントとサーバーの間で使用されるネットワーク帯域幅を測定する方法は?

これをどのように測定/計算しますか?

msgsが一貫した長さとフォーマットであるため、私は一度だけ測定する必要があると仮定します。

私はクライアント/サーバー/ネットワークを制御しています。すべてがタスクに専念できます。クライアントはIOS Appで、サーバーはPHP REST Web Service(Windowsの場合)です。どちらも私のLANにあります。

私はこれについては何も知らず、これまでのところ、strlen()を使用してJSONのサイズを取得しています。それは正しい方向に向かっているのだろうか?

+1

Firebug Netタブでパケットサイズを指定できます。 –

+0

これらの答えを読んで私は私の質問ではっきりしていないことを実感します。関連するHTMLはありません。私は、IOSデバイス上で(PHPの)安静なWebサービスを照会する(objective-c)アプリケーションを持っています。私は質問を更新します。しかし、私はこれに対する答えを適応させることができると思う。私は今しよう。 – Polly

+0

その情報を得るためにチャールズプロキシを使用してください。 – Till

答えて

2

私はCharles Proxyを使用することをお勧めします。これは、HTTP経由で交換されるすべての種類の情報をデバッグするための貴重なツールです。シミュレータと同様にiPhone/iPod/iPadとの間のすべてのHTTP/s通信をトレースするために使用することができます。

システム全体のHTTPプロキシの設定を実際にサポートしていないAndroid端末は、あまりうまくいきません。これらの場合とHTTPベースでない通信の場合は、WireSharkを使用することをお勧めします。

まれにしかわからない理由で、チャールズがHTTPベースの接続でiOSデバイスで失敗することはほとんどありません。典型的なケースはGoogleAnalyticsです。それらについては、もう一度WireSharkをお勧めします。

2

JSON文字列の長さは、転送されたネットワークパケットのペイロードフィールドのサイズのみを示します。このデータフィールドはHTTPパケット内にカプセル化され、HTTPパケットは送信前にIPパケットに入れられます。これらのパケットのそれぞれは、全伝送長さに寄与するヘッダフィールドを有する。

正確な見積もりを行うには、まずWiresharkまたは同等のツールを使用して応答パケットの実際の長さを調べる必要があります。これがアプリケーションの唯一の要求タイプである場合、帯域幅をサーバーアプリケーションの応答サイズに分割して、制限に達する要求の最大数を取得することができます。ただし、クライアントからアクセスできるWebページがいくつかある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> .... 
関連する問題