1

我想检查几台服务器的状态,并在它们启动或关闭时显示在页面上。目前,我正在使用 PHP 的fsockopen()函数来执行此操作。作为此功能的一部分,您可以确定超时时间。这意味着如果服务器关闭,它会在继续之前阻塞 2 秒。fsockopen()这会导致我的网页在显示页面之前等到s 完成。

有没有办法让这些fsockopen()函数与页面的渲染分开运行,并在确定后将它们的结果包含在内?我猜它不一定是 PHP。

4

3 回答 3

1

将其拆分为两个子问题:

1)创建一个 cron 作业(或以其他方式安排)一个脚本,该脚本将检查服务器状态并将结果保存在某处(数据库、缓存、文件、便利贴等)。尽可能频繁地运行它。

2) 在呈现页面时或通过 AJAX 调用查询该结果。

于 2013-05-07T13:58:11.877 回答
0

使用 AJAX。我建议使用 jQuery 的 $.ajax 函数 ( http://api.jquery.com/jQuery.ajax/ ) 来调用将查询服务器的 PHP 脚本。您将为 ajax 调用提供一个成功函数,该函数将在 ajax 调用完成时执行。

于 2013-05-07T13:59:10.023 回答
0

创建一个接受变量以知道要检查哪个服务器的 php 页面

<?php
$server = isset($_GET['server']) ? $_GET['server'] : '';
$upordown = 'invalid server'; //default incase wrong variable is set

switch ($server) {
  case 'server1':
    //check server 1; EG: $upordown = checkserver('http://www.example.com');
    break;
  case 'server2':
    //check server 2;
    break;
  case 'server3':
    //check server 3;
    break;
}

echo $upordown
?>

然后使用 jquery 在您的显示页面上:

<html>
<head>
  <script src='jquery.js'></script>
  <script>
  $(function(){
    $('.serverstatus').each(function() {
      var id = $(this).data('serverid');
      $(this).load('/servercheck.php?server='+id);
    });
  });
  </script>
</head>
<body>
  <div class='serverstatus' data-serverid='server1'>loading</div>
  <div class='serverstatus' data-serverid='server2'>loading</div>
  <div class='serverstatus' data-serverid='server3'>loading</div>
</body>
</html>

现在您可以添加一些额外的安全性,例如缓存和随机服务器名而不是 1、2、3

于 2013-05-07T14:03:13.743 回答