测量GPRS和3G带宽的正确方法

时间:2012-02-09 09:46:43

标签: java blackberry upload io benchmarking

我需要测量几个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直接测试,如MrVincenzo建议的那样。这些是结果:

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

这证明了MDS压缩数据,我最初发送的一系列零很可能正在经历高压缩。现在,GPRS下直接TCP的17 Kbps对我来说听起来更合理。

2 个答案:

答案 0 :(得分:2)

  1. 我既没有在JavaSE上也没在Android上工作,但恕我直言,你的上传测试的概念似乎是正确的,我会做同样的一个区别。我会打开SocketConnection(到HTTP服务器或专用服务器)而不是HttpConnection。原因更多地基于直觉然后基于真实事实 如果您决定使用专用服务器,则应考虑 Amazon EC2按需实例,它提供每小时使用和非常低价格的专用服务器。我过去曾用它们进行压力和负载测试。

  2. 至于第二个问题,我建议如果可能的话,用直接TCP连接重复测试,看看会发生什么。这样,您就可以确定MDS是否压缩发送的数据。

答案 1 :(得分:0)

使用直接TCP连接运行代码,并将deviceside=true添加到网址,即Connector.open()传递。这可能对你有帮助。