Мне нужно измерить реальные скорости передачи данных на нескольких устройствах 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 звучат для меня гораздо разумнее.