0

私は複数のゲームサーバーと、サーバーのステータスを表示するWebサイトを所有しています。

問題は、ページが読み込まれるたびにリモートIPからデータをping /フェッチする必要があるため、Webサイト(サーバーステータスページ)が遅いことです。

サーバーステータスを取得するために動的JSON(ここ)を使用するここなど、他の場所がこれを行うのを見てきました。

上に示したものはすぐに読み込まれるようですが、これをどのように正確に実現できるのでしょうか。

基本的に、サーバーのステータスを取得するたびに大きなラグが発生することなく取得したいと思います(うまく機能するという理由だけで、上記のサーバーのステータスと同様であることが望ましい)。

4

2 に答える 2

1

私はあなたが投稿した例を探してタイミングを合わせてきました(偏った心で、私は認めます)。
私は思います(そしてテストする前に考えました):彼らは2秒ごとにこのデータを生成するサーバー上で実行されているいくつかのコードを持っています。これは単に、json-scriptを呼び出すたびに、サイトがすでに存在するデータ(pingなど)を返すことを意味します。

このすべてのデータをログに記録する可能性もあるため、jsonping呼び出しは単に最後のエントリを返します。それはほぼ瞬時の答えと予測可能なロードタイムを与えるはずです、そしてそれは私がそれをする方法です。

幸運を!

于 2012-08-21T12:03:30.630 に答える
1

2つのファイルを作成します。

1:次のような出力データをpingするためのPHPスクリプト「ping.php」:

$ip = $_REQUEST['ip'];
$cache_file = "ping_{$ip}.json";

if(@filemtime($cache_file) >= (time() - 30)) {
   echo file_get_contents($cache_file);
   return ;
}

// cache is too old. now ping your server 

$json = json_encode(Array(
   'ip' => $ip,
   'players' => $players_count
));

// save new cache
file_put_contents($cache_file, $json);

// output JSON
echo $result;

2:HTML + jQuery

<table id="servers">
<tr>
<td class="ip">1.2.3.4:1234</td>
<td class="players"></td>
</tr>
<tr>
<td class="ip">1.2.3.4:1234</td>
<td class="players"></td>
</tr>
<tr>
<td class="ip">1.2.3.4:1234</td>
<td class="players"></td>
</tr>
</table>

<script type="text/javascript">
$('#servers tr').each(function(){
  var ip = $(this).find('td.ip').text();
  var $players = $(this).find('td.players');
  $players.html('loading');

  // use ping.php to get count of players etc
  $.get('ping.php?ip='+ip, function(data){
    $players.html(data.players);
  }});
</script>

サーバーごとにAJAXリクエストを使用するだけです。ping.phpサーバーのステータスを返します。

于 2012-08-21T12:09:14.903 に答える