【问题标题】:detect internet connection type on my mobile在我的手机上检测互联网连接类型
【发布时间】:2012-12-24 12:47:19
【问题描述】:

我需要在他们的移动设备上向我的客户发送视频,但每个客户以不同的方式连接到互联网,连接速度很慢,速度很快,我有 2 个来自视频的版本,所以我可以将小的发送到慢速连接,然后大到快。

setInterval(function(){
    if(navigator.onLine){
        $("body").html("Connected.");
    }else{
        $("body").html("Not connected.");
    }
},1000);

上面的代码返回是否连接。

现在的问题是:

有没有办法在我的手机上检测互联网连接类型?比如3G、WIFI……等

【问题讨论】:

  • 您可以通过请求已知大小的文件/图像并计时响应来估计速度,而不是获取连接的类型
  • @Rory McCrossan 我怎么能这样做,因为我是 stackoverflow 的新手。
  • @AymanHussein 您需要重新审视您的旧问题,然后单击最能回答您问题的答案左侧的绿色勾号

标签: javascript jquery mobile


【解决方案1】:

您可以编写类似于this 的代码。

var imageAddr = "http://www.tranquilmusic.ca/images/cats/Cat2.JPG" + "?n=" + Math.random();
    var startTime, endTime;
    var downloadSize = 5616998;
    var download = new Image();
    download.onload = function () {
        endTime = (new Date()).getTime();
        showResults();
    }
    startTime = (new Date()).getTime();
    download.src = imageAddr;

    function showResults() {
        var duration = (endTime - startTime) / 1000; //Math.round()
        var bitsLoaded = downloadSize * 8;
        var speedBps = (bitsLoaded / duration).toFixed(2);
        var speedKbps = (speedBps / 1024).toFixed(2);
        var speedMbps = (speedKbps / 1024).toFixed(2);
        alert("Your connection speed is: \n" + 
               speedBps + " bps\n"   + 
               speedKbps + " kbps\n" + 
               speedMbps + " Mbps\n" );
    }​

您可以使用此代码来检测客户端的互联网速度。您无法检测到连接类型。 256+ kb 的文件足以检测速度。

【讨论】:

    【解决方案2】:

    只有在平台公开某些特定 API 时才能这样做,但它不是公开给 JavaScript 的常规浏览器 API 的一部分。所以简短的回答是:不。

    另一种方法是向已知大小的文件发出请求并查看传输需要多长时间,从中可以推断出连接速度,但这意味着额外的流量,因此请务必选择文件好(它应该很小,以免产生过多的移动流量,但也不能太小,以至于您无法从下载中获得任何有用的信息)。

    不幸的是,这可能无法告诉您太多信息,因为移动客户端很可能随时从一个连接切换到一个完全不同的连接。更重要的是,在完全相同的连接上,从服务器接收数据所需的时间可能会从一秒到下一秒大不相同,这取决于影响移动客户端的许多因素。所以如果这是一个视频应用程序,这真的应该由服务器控制,如果服务器发现发送的数据包太少,它应该决定降低视频质量。有媒体服务器可以做到这一点,例如Red5WowzaAdobe Media Server

    【讨论】:

      【解决方案3】:

      一种方法是请求文件并查看下载需要多长时间。示例见this

      如果您的客户使用的是移动设备,那么您的网站下载的每个额外字节都可能需要花费他们。此外,影响下载文件所需时间的因素有很多,“连接类型”只是其中之一。

      但是,这种方法应该会给你一个很好的近似值。

      【讨论】:

        【解决方案4】:

        最初的问题没有区分 (A) 下载和 (B) 上传的连接速度(是的,他需要将视频发送给最终用户,但可能是用户刚刚上传的视频)。接受的答案对于测量下载速度很有用。

        为了提高上传速度,您可以考虑在隐藏表单的隐藏表单字段中嵌入 base64 编码的图像。还要制作一个隐藏的 iframe,并将隐藏的表单定位到隐藏的 iframe。通过 javascript 提交隐藏表单,将当前时间存储在 JS 变量中。在结果页面上,当 onload 触发时,通过 javascript 在 iframe 与其父窗口之间进行通信,发送 onload 事件触发的时间。比较开始时间和结束时间,然后除以传输的字节数。

        您需要使 iframe 中的文档与包含 iframe 的窗口中的文档位于同一域中,以遵守浏览器的同源策略。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-02-01
          • 2012-01-17
          • 1970-01-01
          • 2012-12-11
          • 1970-01-01
          • 1970-01-01
          • 2019-11-10
          相关资源
          最近更新 更多