【问题标题】:Php fopen() latency issues on cycle ajax requests循环ajax请求的php fopen()延迟问题
【发布时间】:2017-09-20 18:30:00
【问题描述】:

我正在开发一个可以进入离线模式的网络应用程序。 ajax 请求每 5 秒检查一次连接是否可用,从而触发 php fopen 函数,如下所示:

if (fopen("http://google.com/", "r")) {
    return true;
}
return false;

这是我的主要问题:从技术上讲,Apache/PHP 是否有可能饱和并导致服务器停机?

我已经阅读了http://php.net/manual/fr/function.fopen.php 上的所有内容,但仍然不知道有什么线索?

【问题讨论】:

  • [...]which can go in offline mode[...] 是什么意思?您的 Web 应用程序是否应该在离线模式下(当客户端没有互联网连接时)在客户端上运行?如果是这样,那么你想用这个 ajax 请求测试什么?如果 ajax 请求能够到达服务器(php 脚本),那么客户端是否在线,但您为什么还要执行fopen("http://google.com/", "r")?如果客户端没有网络连接,那么ajax调用就不会到达php脚本,所以fopen("http://google.com/", "r")不会被调用。
  • 离线模式旨在提供界面的基本外观和功能。一些数据使用清单缓存进行缓存,而其他一些数据无法缓存。 ajax 请求返回“true”或“false”并将其附加到 DOM 的元素。在每次单击操作时,JS 都会检查连接状态是否处于活动状态。如果没有,则提供缓存数据或有限功能。
  • 但这是针对WebApp的用户没有互联网连接的情况,对吗?如果是这样,那么fopen("http://google.com/", "r") 没有任何意义。 PHP 是一种在您的服务器上运行的服务器端语言。因此,您的 ajax 请求将仅测试您的服务器是否与http://google.com/ 建立连接,但不会测试用户的互联网连接是否可用。
  • 除此之外没有任何意义吗?好吧,如果您有许多使用 WebApp 的用户,并且对于每个用户,您每 5 秒调用一次域 http://google.com,那么您可能会被 google 或任何其他网站阻止或限制,因为您向他们发出了许多请求。滥用外国网站并永久请求仅检查是否存在在线连接是一个坏习惯,这甚至可能导致您的主机寄出一封信。
  • 如果您想检查客户端是否有互联网连接,请使用 Chrome、Edge、Firefox、IE 8+ 和 Safari 支持的 Online and offline eventswindow.navigator.onLine

标签: php jquery ajax


【解决方案1】:

我想测试互联网连接是否正常的更好方法是 ping 一个公共 IP,例如 Google DNS 8.8.8.8。

查看这篇文章以获取 PHP 代码: Pinging an IP address using PHP and echoing the result

【讨论】:

  • 谢谢你的建议,我会看看的。
  • 只要您不在代理后面,它就应该可以工作。 http 请求也可以在这种情况下工作,只要正确检测到代理。
【解决方案2】:

你应该试试:

<?php
    $connected = @fsockopen("www.example.com", 80); 
                                        //website, port  (try 80 or 443)
    if ($connected){
        $is_conn = true; //action when connected
        fclose($connected);
    }else{
        $is_conn = false; //action in connection failure
    }
    return $is_conn;
?>

【讨论】:

    【解决方案3】:

    您可以使用 javascript 注册网络连接事件。当notwork开启时,每5s拉一次ajax请求,当网络断开时关闭ajax请求。

    注册网络连接事件参考How to manage network connection events and changes in availability (HTML)

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    相关资源
    最近更新 更多