我正在尝试开发一个Android应用程序来衡量我的网络的上传和下载速度,这可能是我需要运行并每隔2秒钟对其进行一次配置.SpeedTest.net
app是一个理想的app工作方式,但它不是开源的.而且,我需要它每2秒运行一次.完成测试需要几秒钟.
我怎样才能做到这一点?目前我只是下载一个在互联网上找到的小型随机.txt文件,并size/time-to-download
作为下载速率的衡量标准.但每次都会得到奇怪的结果.显然这种方法不起作用.
更新:下载完成.有关如何实现上传速度的任何建议?
我正在寻找检查用户连接速度的可能性.它应该保存为cookie,如果速度很慢,javascript文件以及css文件将被调整.
我目前测试速度的可能性如下
$kb = 512;
flush();
//
echo "<!-";
$time = explode(" ",microtime());
for($x=0;$x<$kb;$x++){
echo str_pad('', 512, '.');
flush();
}
$time_end = explode(" ",microtime());
echo "->";
$start = $time[0] + $time[1];
$finish = $time_end[0] + $time_end[1];
$deltat = $finish - $start;
return round($kb / $deltat, 3);
Run Code Online (Sandbox Code Playgroud)
虽然它有效,但我不喜欢它将如此多的字符放入我的代码中如果我回应所有这些我无法将结果保存在cookie中因为已经有输出.
可以在不同的文件中做一些这样的事吗?你有什么解决方案吗?
提前致谢.
我试图通过使用“speedtest”模块来获取 python 中的下载和上传速度,但是当我使用该模块时它给了我这个错误:
属性错误:模块“speedtest”没有属性“Speedtest”。
我只是声明了变量,这是我的代码:
import speedtest
speedtester = speedtest.Speedtest()
Run Code Online (Sandbox Code Playgroud)
由于某种原因,该模块实际上不具备这些功能。请告诉我我的代码有什么问题我确信从 cmd 以及 pycharm 终端导入模块,但仍然遇到相同的错误。提前致谢
现在这不是一个真正的编程问题,而更像是一个起点。我正在尝试编写一个 Android 应用程序,以每隔几秒和配置文件下载和上传速度进行采样,以及一些更多信息,例如时间戳、GPS 提供的经度和纬度,并在完成后将所有内容另存为 .csv 文件。
我想知道是否有任何 API、库或项目可以用作起点?任何提示?
我找到了ConnectionClass,但我不确定它是否提供了足够的灵活性来做到这一点。
我正在尝试使用 speedtest-cli api。从官方维基复制部分代码(并删除了未使用的东西):
import speedtest
s = speedtest.Speedtest()
s.get_best_server()
s.download()
Run Code Online (Sandbox Code Playgroud)
在 python 控制台中,我一切正常:
>>> import speedtest
>>> s = speedtest.Speedtest()
>>> s.get_best_server()
{HIDDEN}
>>> s.download()
37257579.09084724
Run Code Online (Sandbox Code Playgroud)
但是当我创建 .py 文件并运行它时,我得到:
AttributeError: module 'speedtest' has no attribute 'SpeedTest'
Run Code Online (Sandbox Code Playgroud)
谢谢
虽然问题检查输入是否是字符串的类型已经关闭,但两个答案在我的脑海中飙升了一个微优化问题:以下哪两个解决方案会表现更好?
Char.IsLetter
:string myString = "RandomStringOfLetters";
bool allLetters = myString.All( c => Char.IsLetter(c) );
Run Code Online (Sandbox Code Playgroud)
string s = "RandomStringOfLetters";
bool allLetters = Regex.IsMatch(s, "^[a-z]+$", RegexOptions.IgnoreCase);
Run Code Online (Sandbox Code Playgroud)
不想只问里德或马克的问题我以为我会写一个快速测试来确定哪个表现更好.问题是我没有做过很多代码优化(我倾向于将代码可读性放在首位).
除了在每个运行之前和之后获取时间戳之外,还有哪些其他(更好的?)选项可以确定哪个解决方案运行得更快?
编辑
我修改了Martin的工作答案Console.WriteLine(...)
并将其作为控制台应用程序运行.不确定LinqPad究竟是如何运行应用程序的,但结果大致相同:
41 178
c# optimization premature-optimization micro-optimization speed-test
我很难过.在工作中,我的带有Atheros AR8152/8158 PCI-E快速以太网控制器的Windows 7笔记本电脑的下载速度为10+ Mbps,但上传速度低于1 Mbps.
在我的有线互联网上,两种速度均为12+ Mbps.
顺便说一下,我用www.speedtest.com来测试我的速度.
以下是speedtest-cli给出的输出:(用测试数据编辑的个人信息)
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from ------ (xxx.xxx.xxx.xxx)...
Selecting best server based on latency...
Hosted by ------- (------, --) [15.00 km]: 50.00 ms
Testing download speed........................................
Download: 60.00 Mbit/s
Testing upload speed..................................................
Upload: 10.00 Mbit/s
Run Code Online (Sandbox Code Playgroud)
我希望输出是逗号分隔的ping,dl,ul:
50.00, 60.00, 10.00
Run Code Online (Sandbox Code Playgroud)
我一直在研究解决方案,并提出了这个问题:
speedtest-cli | sed -n "5p;7p;9p" | grep -oE "[[:digit:]]{1,}" | tr '\n' ,
Run Code Online (Sandbox Code Playgroud)
哪个输出:
15,00,50,00,60,00,10,00,
Run Code Online (Sandbox Code Playgroud)
哪个接近我想要的.除了它包括距离第5行的距离(15.00km)并且基于分裂.同样.有没有更好的方法来使用awk或类似的东西?
我正在尝试在 Speedtest API 上使用以下代码
def get_bytes(self):
s = speedtest.Speedtest()
s.get_best_server()
s.download()
s.upload()
res = s.results.dict()
print(res["download"], res["upload"], res["ping"])
Run Code Online (Sandbox Code Playgroud)
但是,我在这种连接方面遇到了一些问题。我每次都收到此错误。
speedtest.ConfigRetrievalError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)>
Run Code Online (Sandbox Code Playgroud)
我在 MacOS Mojave 上使用 Python 3.7 并且已经尝试在 virtualenv 上更新证书
你有什么主意吗?
speed-test ×9
python ×3
android ×2
awk ×1
bash ×1
c# ×1
connection ×1
grep ×1
java ×1
networking ×1
optimization ×1
php ×1
profiling ×1
python-3.x ×1
sed ×1