php - 如何使用 $http.get 有效地轮询 mySQL 数据库

标签 php mysql angularjs angularjs-http

** Angular 1.X ** 大家好!我需要帮助使这个 $http.get 函数异步,正如您从代码中看到的那样,我当前的临时解决方案是将 displayData 范围设置为 setInterval。这显然不是一个有效的解决方案,因为它占用了太多的 CPU、太多的用户数据,并且可能导致 UI 上出现一些闪烁。我希望在更新数据库时更新数组。 请不要推荐我切换到其他框架。 谢谢

$scope.displayData = function() {
    $http.get("read.php").success(function(data) {
        $scope.links = data;
    });
}
setInterval(function(){$scope.displayData();}, 500);

这是我的 PHP(“read.php”)

  <?php
  include("../php/connect.php");
  session_start();
  $output = array();
  $team_id = $_SESSION['team_id'];
  $sql  = "SELECT record_id, user_id, link, note, timestamp FROM             
  link_bank WHERE team_id = '$team_id' AND status = 'valid'";
  $result = mysqli_query($connect, $sql);
  if (mysqli_num_rows($result) > 0) {
        while ($row = mysqli_fetch_array($result)) {
        $output[] = $row;        
  }
  echo json_encode($output);
  }
  ?> 

最佳答案

$http.get 已经是异步的了!异步函数就是在未来某个未知时间完成运行的任何函数。

你真正想做的是long polling .这是您定期向服务器发送请求以获取最新数据的地方,这不是一个好主意的原因有很多(包括您提到的闪烁和高 CPU 使用率)。

我知道您说过您不想让任何人推荐其他框架,但是尝试编写您自己的框架以在数据库更新时通知客户端是一项艰巨的任务。我们无法为您提供仅通过 PHP 和 Javascript 即可提供该功能的一小段代码。

但是,您可以尝试使用 WebSockets 编写您自己的代码。这是按照您建议的方式进行服务器到客户端通信的最直接、非框架的方式。

关于php - 如何使用 $http.get 有效地轮询 mySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47581427/

相关文章:

php - 我可以在谷歌应用引擎中运行 php mysql 吗

mysql - Hashmap-存储和查询sql数据库

MySQL 在同一表的相同列上选择具有 AND 条件的查询

AngularJS 绑定(bind)在遍历翻页书时被破坏(turn.js)

php - 使用滚动面板修复表头

php - 根据主机连接到数据库

php - 在 PHP 中创建非英语目录

php - PDO - 查询没有结果

javascript - Materializecss 工具提示不适用于 Angularjs

mysql - 如何在angularjs中的restful api中传递数据