在网页之后加载服务器状态


Loading server statuses after the webpage

好的,这是我的问题;我目前有一个(有点)工作网页,它使用Minecraft查询来检查Minecraft服务器和Teamspeak框架PHP来检查我的Teampeak服务器。

现在的问题是检查这些东西需要很长时间,并且网站会暂停加载,直到服务器是在线还是离线。

有没有办法先加载网站,然后检查服务器是否启动?还有没有办法偶尔重新加载它而不重新加载页面的其余部分。

我想你可以用JavaScript做到这一点,但由于我从未使用过它,我不知道。

注意:我不发布代码的原因是其中有一些有意义的信息,我不知道是否需要它。如果是,请告诉我。

对 PHP 脚本(位于您的服务器上)进行 AJAX 调用,然后查询并检查服务器的状态并将结果发送回客户端。这将导致每次加载页面时调用脚本,并可能导致大量资源使用。

或者,您可以定期检查(使用 cronjob 或类似)服务器的状态,并将它们存储在数据库中,并在请求时显示它们。

这种模式中使用javascript是很常见的。通常,你会让javascript向服务器上的另一个页面发出请求,以取回该数据(通常以json形式)。查看 ajax 以了解它是如何完成的,但最好使用 js 库为您完成工作 - jquery 很常见。根据你需要做什么,你可能会发现一个框架很有用 - AngularJS是我选择的毒药。

我也会使用JavaScript和XHR或WebSockets。但以防万一这对您来说太大了,您也可以尝试以块的形式提供结果(使用 HTTP 标头Transfer-Encoding: chunked)。

然后,您可以逐个输出服务器列表,浏览器将在可用时显示每个数据块。为此,您需要首先禁用任何类型的输出缓冲(while(ob_get_level() > 0) ob_end_clean();),使用 PHP 的 header 函数显式设置标头,并在每个块后使用 flush()。理想情况下,您的 HTML 应该以一种方式排列,以便在此之前输出所有其他信息(除了服务器状态)。

另外,请注意,在使用新块更新 DOM 时,并非所有浏览器都有相同的间隔,只要 HTML 文档"未完成",您就完全依赖浏览器的标签汤解析。话虽如此,这是避免编写脚本以实现目标的便捷方法。

或者,您也可以尝试使用 <iframe><object> 标记将状态部分嵌入到静态页面中。