Fra*_*ank 5 java connection performance
在我的Java应用程序中,如何检测Internet连接速度有多快?例如,我在家里使用AT&T Fast DSL,我想知道是否有办法可以编写一个执行以下操作的方法:
int getInternetConnectionSpeed()
{
...
}
Run Code Online (Sandbox Code Playgroud)
这将返回一个以kbps为单位的数字,例如2800kbps [2.8 M]
编辑:我问的原因是,在我的应用程序中,我可以打开多个Internet流,具体取决于用户的Internet连接速度,我希望它自动确定打开多少流而不会阻塞应用程序.
我认为你可能以错误的方式思考这个问题。拍摄连接速度快照仅表明该时刻的吞吐量。当您运行测试时,他们很容易运行另一个应用程序,这会消耗他们的带宽,然后您的测量值就毫无价值了。
相反,我认为您应该不断添加或删除线程,具体取决于线程的吞吐量是增加还是减少。我建议这样的东西(仅限伪代码):
while(true) {
double speedBeforeAdding = getCurrentSpeed();
addThread();
// Wait for speed to stabilise
sleep(20 seconds);
double speedAfterAdding = getCurrentSpeed();
if(speedAfterAdding < speedBeforeAdding) {
// Undo the addition of the new thread
removeThread();
// Wait for speed to stabilise
sleep(20 seconds);
if(getNumberOfThreads() > 1) {
double speedBeforeRemoving = getCurrentSpeed();
// Remove a thread because maybe there's too many
removeThread();
// Wait for speed to stabilise
sleep(20 seconds);
double speedAfterRemoving = getCurrentSpeed();
if(speedAfterRemoving < speedBeforeRemoving) {
// Add the thread back
addThread();
// Wait for speed to stabilise
sleep(20 seconds);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以调整睡眠时间以适应。我在这里假设返回所有getCurrentSpeed()下载线程的吞吐量,并且您能够在应用程序执行期间动态打开和关闭线程。