【问题标题】:Proper way of measuring GPRS and 3G bandwidth测量GPRS和3G带宽的正确方法
【发布时间】: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


【解决方案1】:
  1. 我从未在 JavaSE 和 Android 上工作过,但恕我直言,您上传测试的概念似乎是正确的,我会做同样的事情,但有一点不同。我会打开SocketConnection(到HTTP 服务器或专用服务器)而不是HttpConnection。原因更多是基于直觉而不是真实的事实。
    如果您决定使用专用服务器,则应考虑 Amazon EC2 按需实例,该实例提供专用服务器以按小时使用且价格非常低。我过去曾将它们用于压力和负载测试。

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

【讨论】:

  • 再次感谢。至于 Socket,我一开始也使用它,但这是一个测试应用程序,我没有设置任何额外的服务器,也没有在其上部署 ServerSocket。这就是为什么我要“发送垃圾邮件”一个已经存在的 HTTP 服务器 XD。
  • 您也可以使用 SocketConnection 向现有的 HTTP 服务器“发送垃圾邮件”。您可以准备一个预定义的字节数组,其中包含所需的 HTTP 请求、标头和正文(可能仅标头并随机构建正文)并通过 SocketConnection 发送它。艰难,我不确定它是否证明了这种努力。
【解决方案2】:

通过直接 TCP 连接运行您的代码,并将 deviceside=true 添加到 url,即由 Connector.open() 传递。这可能会对你有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 2010-12-18
    • 2011-01-06
    • 2020-11-28
    • 1970-01-01
    • 2017-06-06
    • 2013-10-08
    相关资源
    最近更新 更多