Правильный способ измерения GPRS и пропускной способности 3G - PullRequest
3 голосов
/ 09 февраля 2012

Мне нужно измерить реальные скорости передачи данных на нескольких устройствах GPRS и 3G BlackBerry.Поскольку эти данные зависят от носителя и устройства, а большинство онлайн-тестов скорости основаны на JavaScript, Flash или HTML5, я почувствовал необходимость разработать собственное приложение для тестирования производительности.

Поскольку у меня нет сервера дляоткройте сокет, но я могу использовать несколько HTTP-серверов в моей компании, я использую HTTPConnection, чтобы получить файл (HTTP GET) и отправить количество байтов (HTTP POST), а затем измерять прошедшее время.Скорость загрузки кажется правильной и соответствует известным ограничениям скорости, которые я нашел в Интернете, но тест загрузки дает совершенно неожиданные результаты, в несколько раз превышающие скорость загрузки, а также превышающие теоретические ограничения скорости загрузки.Проверено на симуляторах и реальных устройствах.Вот код для теста загрузки:

    Httpconnectionection connection = null;
    OutputStream os = null;

    try {
        connection = getHttpconnectionection(url);
        if(connection != null){
            connection.setRequestMethod(Httpconnectionection.POST);

            os = connection.openOutputStream();
            for(int i = 0; i < numbytes; i++){
                os.write(0);                        
            }
            os.flush();

            int respCode = connection.getResponseCode();
            if (respCode != Httpconnectionection.HTTP_OK) {
                userMessage = "HTTP Response code: " + respCode + "\nMessage: " + connection.getResponseMessage();
            }
        } else {
            userMessage = "unable to connnect";
        }                   
    } catch (IOException e) {
        userMessage = e.toString();
    } finally {
        if(os != null){
            try {
                os.close();
            } catch (IOException e) {}
        }

        if(connection != null){
            try {
                connection.close();
            } catch (IOException e) {}
        }
    }

Правильно ли этот тест, если бы я должен был выполнить аналогичный тест на JavaSE или Android?Я делаю что-то неправильно?Я озадачен здесь.

Мой второй вопрос больше касается BlackBerry: я знаю, что в BlackBerry MDS добавляет некоторое сжатие.Может ли быть так, что и симуляторы, и устройства (все мои устройства находятся на BIS или BES) сжимают отправленные данные (все они равны нулю, поэтому очень хорошо сжиматься), и при этом тест не учитывает реальное количество отправленных байтовно сжатые?


ОБНОВЛЕНИЕ: По поводу моего второго вопроса, я подозревал, что MDS может сжиматься, поэтому я изменил строку записи для этого, чтобы добавить энтропию в тест:

os.write(i);

Я также обновил тестовый комплект для поддержки различных режимов подключения и тестирования с использованием TCP direct, как предложил г-н Винченцо.Вот результаты:

-------------------------------------------------------------
|   Connection Mode |   Mean Speed (3G) |   Mean Speed(GPRS)|
-------------------------------------------------------------
|   BIS             |   390 Kbps        |   90 Kbps         |
|   Direct TCP      |   255 Kbps        |   17 Kbps         |
-------------------------------------------------------------

Это доказывает, что MDS сжимает данные, и серия нулей, которую я отправлял сначала, очень вероятно подвергалась сильному сжатию.Теперь 17 Кбит / с для прямого TCP под GPRS звучат для меня гораздо разумнее.

Ответы [ 2 ]

2 голосов
/ 20 февраля 2012
  1. Я никогда не работал ни на JavaSE, ни на Android, но ИМХО концепция вашего теста загрузки кажется правильной, и я бы сделал то же самое с одним отличием. Я бы открыл SocketConnection (для HTTP-сервера или выделенного сервера) вместо HttpConnection. Причина в большей степени основана на внутреннем чувстве , чем на реальных фактах.
    Если вы решили использовать выделенный сервер, вам следует рассмотреть инстансы по требованию Amazon EC2 , которые предоставляют выделенные серверы для почасового использования и очень низкие цены. Я использовал их в прошлом для испытаний на нагрузку и нагрузку.

  2. Что касается второго вопроса, я бы предложил повторить тест с прямым TCP-соединением, если это возможно, и посмотреть, что произойдет. Таким образом, вы сможете определить, сжимает ли MDS отправленные данные или нет.

0 голосов
/ 23 февраля 2012

Запустите ваш код с прямым TCP-соединением и добавьте deviceside=true к URL-адресу, то есть передайте Connector.open().Это может вам помочь.

...