我拥有多个游戏服务器以及一个显示服务器状态的网站。
问题是网站(服务器状态页面)很慢,因为每次加载页面时,它都需要从远程IP ping/获取数据。
我见过其他地方这样做,比如here,他们使用dynamic JSON (here)来获取服务器状态。
上面显示的那个似乎是立即加载的,我想知道如何准确地实现这一点?
基本上,我希望获取服务器状态,而不会在每次加载它时造成重大延迟(最好类似于上面的那个,因为它工作得很好)。
发布于 2012-08-21 20:03:31
我一直在寻找和选择你发布的例子(我承认,我有偏见)。
我认为(在测试之前也是如此):他们在服务器上运行了一些代码,每隔2秒生成一次数据。这仅仅意味着每次调用json-script时,站点只返回已经存在的数据(比如ping)。
它们甚至可能记录所有这些数据,因此json ping调用只返回最后一个条目。这应该会给出一个几乎即时的答案和可预测的加载时间,这就是我将如何做的。
祝好运!
发布于 2012-08-21 20:09:15
创建两个文件:
1:用于pinging的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:超文本标记语言+ 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将返回服务器状态。
https://stackoverflow.com/questions/12053845
复制相似问题