【问题标题】:Website down due to calling AJAX - PHP由于调用 AJAX - PHP 导致网站关闭
【发布时间】:2015-08-03 09:30:55
【问题描述】:

我每隔 5 秒调用一次 AJAX,以将当前登录用户的一些信息更新到 PHP 中的数据库表中。

但它会给我的网站带来沉重的负担,并且当有多个用户登录我的网站时,网站就会关闭。

有什么办法可以改善吗?

有什么方法可以使用 socket.io 或任何 JS 库(node.js 或 angular.js 或主干.js 或任何其他)解决我的问题?

这是我正在使用的代码:

Javascript 代码:

jQuery(document).ready(function ($) {   

   update_data(); 

   function update_data() {
       $.ajax({
          type: "POST",
          url: "$URL",
          data: {update_current_time:1},
          success: function(response){
            setTimeout(update_data, 5000);
          },
          error: function(){
            setTimeout(update_data, 5000);
          }
       });
   }
});

PHP 代码:

if(isset($_POST['update_current_time']))
{
  $query = "UPDATE users SET user_timer=now() WHERE user_id=".$_SESSION['id'];
  $db->execute();
  echo 'success';
  die;
}

【问题讨论】:

  • 这次更新的意义何在?你用这个干什么?可能有更好的、完全不同的方法来解决您在此处尝试解决的任何问题。
  • 使用 websocket 并让 websocket 在新用户登录或会话到期时推送更新
  • 最好的选择是使用 websocket。看看这个链接html5rocks.com/en/tutorials/websockets/basics
  • 实际页面加载时间会更容易,它们将更真实地指示网站上的用户活动。除非网站大量使用 javascript 和 ajax 调用;由此替代的计时方法就足够了
  • 首先考虑 TCP 连接的超时时间超过 5 秒。如果您认为任何未在 5 秒内签到的用户是“离线”的,那么您已经通过临时网络中断来打折用户。您可能可以安全地将时间范围延长到一分钟或更长时间。

标签: javascript php ajax angularjs node.js


【解决方案1】:

除非您拥有大量用户并且您的架构完全过小,否则每个用户每 5 秒发出一个请求不应影响您的架构。

首先,请确保使用日志,您没有比这更多的请求。 然后,一定要调整你的 apache/php/mysql 配置,这样它就不会占用太多的内存和时间来回答。

每 5 秒为每个用户创建一个请求是您在创建网站时需要完全预料到的事情,如果您的服务器不能正确处理该请求,那么就会出现问题。

【讨论】:

  • 其实,我想看看哪个用户在线或离线,所以上面的代码运行完美。但是当多个用户上线时,每个用户会在 5 秒后调用一次 AJAX。 Mysql 数据库收到很多请求,我认为它导致我的网站处于关闭状态。
  • 也许你可以减少请求之间的延迟。延迟 30 秒或 1 分钟查看谁在线通常是完全没问题的。
  • 你能指导我解决这个问题吗?我想尝试不同的方法来解决这个问题,这对将来的使用非常有用。
  • Socket 根本帮不了你。
猜你喜欢
  • 2022-01-18
  • 2016-01-19
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-10
相关资源
最近更新 更多