关于后端:测速工具使用心得体会

1次阅读

共计 5750 个字符,预计需要花费 15 分钟才能阅读完成。

导语 :之前写过一个测速小工具,应用的是speedtest-cli 提供的 api 办法,当然除了这个还有其余的测速工具,明天就这个测速工具来说一下应用体验和感触。

  • 测速科普
  • 测速工具
  • DNS 模块
  • 实战案例

测速科普

  • 上传下载

网络传输分为发送和接收数据两局部,上传就是发送数据,下载就是接收数据,传输的速度会受到带宽和设施的制约。

  • Byte 和 Bit

日常传输中大概 1Mbps=1024/8KB/s=128KB/s(1/8), 大 B 是 byte 字节,小 b 是 bit 比特,1B=8b。比如说你家里的宽带是 100Mbps,那么实践上最大上传速度是 12800KB/s, 也就是 12.5MB/s。

上网过程中的过程中网速快慢会受到来自本身电脑软硬件配置、旅行网站地位、运营商切换等影响,所以理论网速会低于实践网速的。

  • 宽带速率

上面是一个常见的宽带速率对照表:

宽带速率单位用 bps 示意,即比特每秒钟传输多少信息,是 bit per second 的缩写,实际上说的 1M 带宽是 1Mbps(兆比特每秒)。

  • Ping

ping 是指一个数据包从用户的设施发送到测速点或站点,而后再返回所用的工夫。个别以毫米奥计算,0-100ms 都是失常的,不会有显著的卡顿。

  • 抖动

网络提早是指信息从发送到接管通过的延迟时间,抖动是最大提早和最小提早的时间差,比方最大提早 30ms,最小提早 10ms,抖动就是 20ms,标识网络的稳定性。

  • 丢包

丢包是指一个或者多个数据包无奈通过网络达到目的地。起因可能有网络中门路衰败造成信号衰减,通道阻塞,损坏的数据包被回绝通过,有缺点的网上硬件,网络驱动程序有故障等等。

测速工具

说到测速,大家都应该不生疏吧,咱们生存在这个网络时代,简直家家户户都装了宽带,连贯了无线,都要上网。

那么网速的快慢就决定了你的上网体验,网速快的话,购物,玩游戏,看剧刷视频都很棒的,然而很卡的网速什么也做不了。

接下来,我就说一下我平时用到的几款测速工具。

  • ookla
  • 测速网
  • 便民查问网

上面就来看一下测速的界面后果和差别。

ookla 的测速后果

便民查问网的测速后果

测速网的测速后果

不过开发一款测速小工具就须要用到命令行工具了,能够本人抉择测速供应商,获取专属测速后果,很不便开发者应用。

DNS 模块

这个 dns 模块是 nodejs 自带的一个外部模块,用来进行 dns 相干的操作。上面就简略的几个办法进行阐明。

  • 获取用户 ip 地址

进行 dns 首选获取用户的 ip 地址,而后再进行相应的操作。上面是我本人写的一个获取用户 ip 地址的办法,在这里写一下, 肯定要应用 nodejs 或者相干框架比方 express 才能够调用的。

// 获取用户 ip 地址
/**
 * req 就是申请头
 */
function getClientIP(req) {return req.headers['x-forwarded-for'] || // 判断是否有反向代理 IP
        req.connection.remoteAddress || // 判断 connection 的近程 IP
        req.socket.remoteAddress || // 判断后端的 socket 的 IP
        req.connection.socket.remoteAddress;
};
  • 查问城市和运营商

这里要应用到一个 npm 包 ip2region, 这个能够查问 ip 所对应的运营商和城市。

通过下面办法拿到用户 ip 后,能够通过这个包提供的办法查问,反对 ipv4 和 ipv6。

const ip2region = require('ip2region').default;
const query = new ip2region();
let ip = getClientIP(req); // 比方这里 ip 是 120.25.58.68
const res1 = query.search(ip);
console.log(res1);
// {country: '中国', province: '广东省', city: '深圳市', isp: '阿里云'}

const res2 = query.search('240e:47d:c20:1627:30a3:ba0d:a5e6:ec19');
console.log(res2);
// {country: "中国", province: "广东省", city: "", isp:" 中国电信 "}
  • 获取域名对应的 ip

这里能够应用 dns 模块的 lookupService 办法,能够查问域名对应的 ip 地址。

const dns = require('dns');
dns.lookup('www.baidu.com', function (err, data) {if (err) {throw new Error(err);
    } else {console.log(data); // 180.101.49.12
    }
})

dns 的办法就到这里,具体的能够看 Nodejs 的 dns 文档的阐明。

实战案例

接下来就通过 speedtest.net 提供的命令行工具测速一下网速。

装置命令行

  • macOS
brew tap teamookla/speedtest
brew update
brew install speedtest --force

或者

下载地址

  • Ubuntu/Debian
sudo apt-get install curl
curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | sudo bash
sudo apt-get install speedtest
  • Fedora/Centos/Redhat
curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.rpm.sh | sudo bash
sudo yum install speedtest
  • FreeBSD
sudo pkg update && sudo pkg install -g libidn2 ca_root_nss
sudo pkg add "https://install.speedtest.net/app/cli/ookla-speedtest-1.2.0-freebsd12-x86_64.pkg"
# freeBSD 13 install
sudo pkg add "https://install.speedtest.net/app/cli/ookla-speedtest-1.2.0-freebsd13-x86_64.pkg"
  • windows

下载地址

  • Linux

x86_64

i386

armel

armhf

aarch64

查看帮忙命令

Speedtest by Ookla is the official command line client for testing the speed and performance of your internet connection.

Version: speedtest 1.2.0.84

Usage: speedtest [<options>]
  -h, --help                        Print usage information
  -V, --version                     Print version number
  -L, --servers                     List nearest servers
  -s, --server-id=#                 Specify a server from the server list using its id
  -I, --interface=ARG               Attempt to bind to the specified interface when connecting to servers
  -i, --ip=ARG                      Attempt to bind to the specified IP address when connecting to servers
  -o, --host=ARG                    Specify a server, from the server list, using its host's fully qualified domain name
  -p, --progress=yes|no             Enable or disable progress bar (Note: only available for 'human-readable'
                                    or 'json' and defaults to yes when interactive)
  -P, --precision=#                 Number of decimals to use (0-8, default=2)
  -f, --format=ARG                  Output format (see below for valid formats)
      --progress-update-interval=#  Progress update interval (100-1000 milliseconds)
  -u, --unit[=ARG]                  Output unit for displaying speeds (Note: this is only applicable
                                    for‘human-readable’output format and the default unit is Mbps)
  -a                                Shortcut for [-u auto-decimal-bits]
  -A                                Shortcut for [-u auto-decimal-bytes]
  -b                                Shortcut for [-u auto-binary-bits]
  -B                                Shortcut for [-u auto-binary-bytes]
      --selection-details           Show server selection details
      --ca-certificate=ARG          CA Certificate bundle path
  -v                                Logging verbosity. Specify multiple times for higher verbosity
      --output-header               Show output header for CSV and TSV formats

 Valid output formats: human-readable (default), csv, tsv, json, jsonl, json-pretty

 Machine readable formats (csv, tsv, json, jsonl, json-pretty) use bytes as the unit of measure with max precision

 Valid units for [-u] flag:
   Decimal prefix, bits per second:  bps, kbps, Mbps, Gbps
   Decimal prefix, bytes per second: B/s, kB/s, MB/s, GB/s
   Binary prefix, bits per second:   kibps, Mibps, Gibps
   Binary prefix, bytes per second:  kiB/s, MiB/s, GiB/s
   Auto-scaled prefix: auto-binary-bits, auto-binary-bytes, auto-decimal-bits, auto-decimal-bytes

获取网速服务商

speedtest --servers

后果是

Closest servers:

    ID  Name                           Location             Country
==============================================================================
  6715  China Mobile Zhejiang 5G       Hangzhou             China
  5396  China Telecom JiangSu 5G       Suzhou               China
 45170  China Unicom                   Wu Xi                China
 30852  Duke Kunshan University        Kunshan              China
 24447  China Unicom 5G                ShangHai             China
 25637  Chinamobile-5G                 Shanghai             China
  3633  China Telecom                  Shanghai             China
 36663  China Telecom JiangSu 5G       Zhenjiang            China
 26352  China Telecom JiangSu 5G       Nanjing              China
  5317  江苏电信 5G                 Yangzhou             China

测试

我就抉择第一个 id 为 6715 的中国移动浙江 5G 服务商吧。

speedtest --server-id=6715

测试后果为

   Speedtest by Ookla

      Server: China Mobile Zhejiang 5G - Hangzhou (id: 6715)
         ISP: China Telecom
Idle Latency:     9.50 ms   (jitter: 0.21ms, low: 9.33ms, high: 10.10ms)
    Download:    93.55 Mbps (data used: 58.3 MB)
                 29.61 ms   (jitter: 3.47ms, low: 10.80ms, high: 44.25ms)
      Upload:    23.23 Mbps (data used: 40.7 MB)
                 11.31 ms   (jitter: 6.19ms, low: 9.37ms, high: 335.13ms)
 Packet Loss:     0.0%

当然,以上是通过 Linux 的 centos7 发行版测试的,咱们能够试一下 node 看看行不行。

node 测试

  • 新建文件夹
mkdir speedtest
cd speedtest
npm init -y
  • 装置测试包
npm i speedtest-cli -g
  • 获取运营商
speedtest-cli --list --json
  • 测试开始

sid 就是运营商的 id。

speedtest-cli --share --json --server sid

刚刚试了下貌似不能够,去年我用的时候还是能够的,那就间接引入包测试下吧。

// speed.js
const speedtest = require('speedtest-cli');
console.log(speedtest);

测试后果如下:

START: 1663385827468
{}
received  0.01Mb 0%
received  0.21Mb 2%
received  3.02Mb 27%
received  7.74Mb 69%

没有达到想要的成果,那还是应用 ookla 家的测试命令行工具吧。

通过以上几个步骤就能够测试你的网速了。

写在最初

以上就是我之前开发测速小工具的一些心得体会,如果对此感兴趣的敌人,也能够试着体验一下哦。

正文完
 0