【发布时间】:2012-02-09 09:46:42
【问题描述】:
我需要测量几个 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);
我还更新了测试工具以支持不同的连接模式,并按照 MrVincenzo 的建议使用 TCP 直接进行测试。结果如下:
-------------------------------------------------------------
| Connection Mode | Mean Speed (3G) | Mean Speed(GPRS)|
-------------------------------------------------------------
| BIS | 390 Kbps | 90 Kbps |
| Direct TCP | 255 Kbps | 17 Kbps |
-------------------------------------------------------------
这证明 MDS 对数据进行了压缩,而我一开始发送的一系列零很可能经过了高度压缩。现在 GPRS 下直接 TCP 的 17 Kbps 对我来说听起来更合理。
【问题讨论】:
-
如果可能的话,我建议使用直接 TCP 连接重复测试(将
deviceside=true添加到您在getHttpconnectionection()中传递给Connector.open()的 url),看看会发生什么。这样您就可以确定 MDS 是否对发送的数据进行压缩。 -
@MrVincenzo 谢谢,这是一个很好的观点。更新了我的问题。您可能想在问题中发表您的评论。
-
您的意思是像我们在下载内容时可以在对话框中看到的速度。像 50KB/秒 ??
-
好吧,我在网上和文档上搜索,但找不到相同的,这可能是一些编程方式
标签: java blackberry upload io benchmarking