2012-08-26 10 views
6

Mam klienta, który uzyskuje odpowiedź JSON z serwera. Chcę obliczyć, ile żądań/odpowiedzi pochłonie mój przydział transferu z firmy hostingowej (na przykład 100 GB miesięcznie).Jak zmierzyć przepustowość sieci używaną między klientem a serwerem?

Jak to zmierzyć/obliczyć?

Zakładam, że muszę zmierzyć tylko raz, ponieważ wiadomości mają stałą długość i format.

Mam kontrolę nad klientem/serwerem/siecią. Wszystkie mogą być wyjątkowo dedykowane do tego zadania. Klient jest aplikacją IOS, a serwer jest usługą sieciową REST PHP (w systemie Windows). Oba w mojej sieci LAN.

Nic o tym nie wiem i do tej pory uzyskałem rozmiar JSON przy użyciu strlen(). Czy to nawet zmierza we właściwym kierunku?

+1

Zakładka Firebug Net może podać rozmiar pakietu. –

+0

Czytając te odpowiedzi, zdaję sobie sprawę, że nie było jasne w moim pytaniu. Nie ma kodu HTML. Mam aplikację (object-c) na urządzeniu IOS, wysyłającą zapytanie do PHP Restful Web Service. Zaktualizuję pytanie. Ale myślę, że mogę zaadaptować odpowiedzi na to. Spróbuję teraz. – Polly

+0

Użyj proxy Charles, aby uzyskać te informacje. – Till

Odpowiedz

2

polecam korzystania Charles Proxy. Jest nieocenionym narzędziem do debugowania wszelkiego rodzaju informacji wymienianych za pośrednictwem protokołu HTTP. Możesz go użyć do śledzenia całej komunikacji HTTP/s zi do twojego iPhone'a/iPoda/iPada, a także symulatora.

Niestety nie działa zbyt dobrze w przypadku większości urządzeń z systemem Android, ponieważ w rzeczywistości nie obsługują one konfigurowania ogólnosystemowego proxy HTTP. W przypadku tych przypadków i komunikacji nie opartych na HTTP, polecam używanie WireShark.

W rzadkich przypadkach, z powodów, które wciąż są dla mnie niejasne, Charles rzadko kończy się niepowodzeniem na urządzeniach z systemem iOS dla połączeń opartych na protokole HTTP - typowy przypadek to GoogleAnalytics. Dla tych, ponownie polecam WireShark.

2

Długość ciągu JSON daje tylko rozmiar pola ładunku w przesyłanych pakietach sieciowych. To pole danych może być hermetyzowane w pakiecie HTTP, a pakiet HTTP powinien zostać przesłany do pakietu IP przed transmisją. Każdy z tych pakietów ma pola nagłówka, co przyczynia się do całkowitej długości transmisji.

W celu dokładnego oszacowania należy najpierw znaleźć rzeczywistą długość pakietu odpowiedzi za pomocą narzędzia Wireshark lub równoważnego narzędzia. Jeśli jest to jedyny typ żądania dla aplikacji, możesz podzielić przepustowość na rozmiar odpowiedzi aplikacji serwera, aby uzyskać maksymalną liczbę żądań, aby osiągnąć limit. Zwykle jednak tak nie jest, jeśli masz aplikację internetową, która ma kilka stron internetowych, które są dostępne od klientów, ponieważ każdy dostęp (przeglądanie) spowoduje transfer danych z serwera do klienta.

1

Twoje logi Apache będzie miał liczbę bajtów każdego żądania, ale zakładając, że chcesz całkowicie PHP rozwiązanie, dodać to na początku skryptu:

<?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> .... 
Powiązane problemy