我正在运行一个网站,该网站监视一些服务器,并且每天都会添加更多服务器。
遗憾的是,我当前的解决方案非常慢(31 台服务器的加载时间约为 10 秒)。我正在使用 fsockopen 检查 IP 和端口。因为我使用条目(主机和端口)解析 XML,所以我必须创建一个函数并在解析器中使用该函数,以便网站的访问者可以看到服务器的在线或离线状态。
我当前的“checkserver”功能如下所示:
function checkServer($ip, $port)
{
$fsockopen = @fsockopen($ip, $port, $errorNo, $errorStr, 1);
if (!$fsockopen)
return false;
else return true;
}
在解析器中,服务器状态的“if”规则如下所示:
if (checkServer((string)$server->host, (string)$server->port))
{
echo "SERVER ONLINE!";
}
else
{
echo "SERVER OFFLINE!";
}
其中
$server
是 XML <serverlist></serverlist>
标记中列出的每个服务器。
我已经尝试将 fsockopen 的超时从 1 更改为 0.1,但有些服务器随后显示为脱机,并且加载时间仍为 8-10 秒。
如何加快加载时间?有人可以帮我吗?这个项目对我来说非常重要。谢谢你!我真的很感谢每一个有用的答案!
首先我建议缓存。我不确定有多少用户会打开该页面,但如果每秒有多个用户打开该页面,您将需要处理大量流量,从长远来看可能会产生问题。
您有 2 个解决方案:
使用异步事件可以让您做您想做的事情。这里有一些库可以帮助您执行此操作。到目前为止我还没有使用过所以我不能说哪个是最好的。
使用欺骗并使用exec和命令行的库:https://github.com/oliverde8/PHP-AsynchronousJobs
使用pthread库,这不是用php编码的库,因此您需要将其二进制文件添加到您的http://pthreads.org/。您可以在上面添加另一个库以方便使用
最后使用 javascript,打开页面,然后一些 ajax 为每个服务器单独调用您的 php 并询问状态。