PHP服务器连接测试

3
有没有可以检查URL/IP连接速度的PHP脚本或片段?比如说,当我运行这个PHP脚本时,它会显示连接到www.example.com所花费的时间(211毫秒),我找到了一些只能告诉我它在线还是离线但不能告诉我它所需的速度的脚本。
我非常清楚免费和付费服务。我想创建自己的自定义/私有服务来监控我的多个服务器,但找不到一个简单的脚本来连接给定的位置。

4
连接速度和延迟是两个不同的概念。 - zerkms
@zerkms 是的,这就是为什么我在问是否有人知道一个获取连接速度示例脚本或者是否可以用 PHP 实现。 :) - chillers
1
@DanielO 在 PHP 中单独实现这一点是不可能的,因为你需要在客户端也有相应操作。而且这并不像“这是连接X的速度”那么简单,有很多因素会影响它。例如,你可以使用 TCP 流来确定它,但所有那些 ACK 的开销会更高。或者你可以使用 UDP 流,但如果丢包了怎么办?你是否认为这会对速度产生不利影响,还是只关心在时间 X 内传输的总数据负载?这并不是一个明确的问题,也不是一个轻松实现的问题。 - DaveRandom
@DanielO 至少你应该投入几百个并发连接,以便在谈论数万个并发连接的规模时获得负载时间的真实表示。基于一个连接来计算就像说“我从卧室窗口看不到任何鲨鱼,因此海洋中没有鲨鱼”。exec() Apache Bench 是一个不错的穷人方法。 - DaveRandom
@DaveRandom 我不是在尝试进行基准测试。 - chillers
显示剩余6条评论
2个回答

5
也许类似这样的内容:
<?php
// Create a curl handle
$ch = curl_init('http://www.yahoo.com/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Execute
curl_exec($ch);

// Check if any error occured
if(!curl_errno($ch)) {
    $info = curl_getinfo($ch);
    echo 'Took ' . $info['total_time'] . ' seconds to send a request to ' . $info['url'];
}
// Close handle
curl_close($ch);
?>

它直接在页面中加载雅虎吗? - chillers
抱歉,我之前写成了false而不是true,已经进行了修改和测试。 - Kyle Hudson
-1,因为这并没有回答问题 - 从一个负载很重的服务器加载HTML over HTTP页面的时间几乎与连接速度无关。 - DaveRandom
可以了,谢谢!我只需要一个大致的想法。 - chillers
1
@DaveRandom 他只是在寻找如何实现它的想法,他想测试网站的速度而不仅仅是连接速度。-1 是没有理由的。他接受了我的答案,然后又取消了 :( - Kyle Hudson
1
@KyleHudson:-1 不仅针对你的答案,我想 DaveRandom 也给了被采纳的答案 -1!我会 +1 你的答案,因为对我来说,你的回答是有道理的。 - raidenace

0
尝试这个:
$ch = curl_init("http://www.google.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$start = microtime();
$foo = curl_exec($ch);
$end = microtime();
curl_close($ch);

echo "Seconds to load = ". $end - $start;

这不会考虑图像或 JavaScript,只考虑初始响应时间和服务器代码的运行。


我只需要响应时间,而不是页面加载速度。我测试了一下,得到了“-0.694715”,这个值是否正确代表了694毫秒? - chillers
1
-1 是因为这并没有回答问题(一个从负载很重的服务器加载的HTML over HTTP页面的加载时间几乎与连接速度无关),而且你的代码也不起作用,主要是因为你没有传递 truemicrotime() - DaveRandom
1
@DaveRandom:这个答案达到了预期的效果。实际上,你的评论应该得到一个-1,因为你没有理解OP所问的问题,而回答问题的人却理解了。我正在+1这个答案。 - raidenace

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接