【发布时间】: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 events 或 window.navigator.onLine。