尝试从Minecraft服务器刷新ping信息-可能或不可能


Trying to refresh ping information from a Minecraft server - possible or not?

我正在制作一个(有点)管理Minecraft服务器的仪表板。我目前正在尝试做的是打印有多少玩家在线(跨所有服务器)并每3秒刷新一次值。

什么是有效的-显示玩家总数-只有一次;刷新(使用jQuery)相应的div也可以工作(经过调试测试)。什么不起作用-当刷新(使用jQuery)和打印PHP函数的值时,它不会刷新函数本身(它只是一遍又一遍地打印相同的东西)。注意:我没有从客户机和服务器控制台得到任何错误。

代码如下:

PHP -获取跨服务器的玩家数量:

function getPlayersTotal() {
    $total = 0;
    foreach (getServers() as $serverInfo) {
        if (isOnline($serverInfo)) {
            $ping = json_decode(file_get_contents('http://api.minetools.eu/ping/' . $serverInfo), true);
            $total += intval($ping['players']['online']);
        }
    }
    return $total;
}

JS -刷新位于HEAD中的-

<script>
    $(document).ready(
        function() {
            setInterval(function() {
                var players = <?php print "" . getPlayersTotal() ?>;
                $('#playersPLZ').text(
                        "" + players);
            }, 3000);
        });
</script>

谁能解释给我如果(1.)是否有可能刷新值-以某种方式-的PHP函数,(2.)如何做到这一点?

问候。

这是Ajax的任务。现在发生的事情是这样的:PHP代码将玩家数量直接输出到发送给浏览器的JavaScript中。如果玩家的数量是50,那么浏览器所看到的就是:

<script>
    $(document).ready(
        function() {
            setInterval(function() {
                var players = 50;
                $('#playersPLZ').text(
                        "" + players);
            }, 3000);
        });
</script>

所以同样的函数,数字50,每三秒运行一次。浏览器对PHP一无所知,它只看到数字50。对于浏览器来说,这就像硬编码数字50一样。

你需要做的是每3秒向服务器发送一个请求,请求新的数字,因为你的服务器是PHP代码运行的地方。

需要创建一个新的PHP文件。我叫它num-players.php。该文件应该输出玩家的数量。您可以这样做:

<?php
    // You will need to require the file containing your getPlayersTotal() function
    echo getPlayersTotal();
?>

然后,你的JavaScript可以像这样:

<script>
    $(document).ready(function() {
        setInterval(function() {
            $.get("num-players.php", function(players) {
                $("#playersPLZ").text(players);
            });
        }, 3000);
    });
</script>

这将发送一个请求回您的服务器,每3秒,要求新的号码。num-players.php中的代码将返回该数字,当请求完成时,您的元素将使用该数字更新。