7

サーバーからJSON応答を取得するクライアントがあります。Webホスティング会社から割り当てられた転送許容量(たとえば、月額100GB)を消費する要求/応答の数を計算したいと思います。

これを測定/計算するにはどうすればよいですか?

メッセージの長さと形式は一貫しているため、測定する必要があるのは1回だけだと思います。

私はクライアント/サーバー/ネットワークを制御できます。すべてがタスクに独自に専念することができます。クライアントはIOSアプリであり、サーバーはPHP REST Webサービス(Windowsの場合)です。両方とも私のLAN上にあります。

私はこれについて何も知りません、そして今のところ、を使用してJSONのサイズを取得していますstrlen()。それも正しい方向に向かっていますか?

4

3 に答える 3

2

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

したがって、正確な見積もりを行うには、最初にWiresharkまたは同等のツールを使用して応答パケットの実際の長さを見つける必要があります。これがアプリケーションの唯一のリクエストタイプである場合は、帯域幅をサーバーアプリケーションの応答サイズに分割して、制限に達するリクエストの最大数を取得できます。ただし、これは通常、クライアントからアクセス可能な複数のWebページを持つWebアプリケーションがある場合には当てはまりません。これは、アクセス(ブラウジング)によってサーバーからクライアントへのデータ転送が発生するためです。

于 2012-08-26T17:14:27.443 に答える
2

CharlesProxyの使用をお勧めします。これは、HTTPを介して交換されるあらゆる種類の情報をデバッグするための非常に貴重なツールです。シミュレータだけでなく、iPhone / iPod/iPadとの間のすべてのHTTP/s通信をトレースするために使用できます。

残念ながら、ほとんどのAndroidデバイスでは、システム全体のHTTPプロキシの構成が実際にはサポートされていないため、うまく機能しません。このような場合やHTTPベースでない通信の場合は、WireSharkを使用することをお勧めします。

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

于 2012-08-26T18:40:50.760 に答える
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> ....
于 2012-08-26T17:14:34.207 に答える