使用PHP的异步通知

时间:2019-04-17 14:59:51

标签: php asynchronous

我在我的项目上创建了一个通知系统,您从名为“ notification”的数据库表中收到具有以下结构的通知:

---------------------------------
| ID | TITLE | VIEWED | ID_USER |
---------------------------------
| 1  |  test |    0   |    15   |
---------------------------------
| 2  | test2 |    1   |    12   |
---------------------------------

然后我收到ID用户的通知,如果查看的次数为0,则添加带有未查看通知计数的铃铛。

但是问题是您需要刷新页面以获取通知,所以我的问题是:是否有任何方法可以异步通知?这意味着当您收到通知时,您会同时收到铃声,而无需刷新页面

2 个答案:

答案 0 :(得分:1)

您需要使用诸如Ratchet(http://socketo.me)之类的websockets库。

How to create websockets server in PHP

答案 1 :(得分:1)

您不能严格在PHP中执行此操作,但可以在循环中使用javascript函数每隔5秒左右对PHP文件运行AJAX请求,以查看登录用户是否收到了最近的任何通知。哪些PHP文件以json数组作为响应,该数组包含ajax请求进入DOM的通知详细信息。

在我的示例中,我将在脚本中使用jQuery来运行ajax。

HTML文件(index.php)

<html>
  <head>
    <script src="https://code.jquery.com/jquery-3.3.1.js"></script>
    <script>
      var userid = "<?php echo $_SESSION['id']; ?>";

      setInterval(NotificationRequest, 5000); //will run the function 'NotificationRequest' every 5 seconds
      function NotificationRequest() {
        $.ajax({
          url: 'checknoti.php', //the php file to request
          dataType: 'text',
          data: {data : userid},
          method: 'POST',
          success: function(result) {
            $('div#notification').html(result); //insert result from file to inside the div element
          }
        });
      }
    </script>
  </head>
  <body>
    <h1>Notification List</h1>
    <div id="notification"></div>
  </body>
</html>

PHP文件(checknoti.php)

$conn = mysqli_connect("127.0.0.1", "username", "password", "database");
$userID = $_POST['data'];

$sql = "SELECT * FROM `notification` WHERE `ID_USER`='$userID' AND `VIEWED`='0'";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_accoc($result);

echo $row['title'];

此脚本(不完全是),应导致ajax请求向服务器询问用户尚未查看的通知,然后html将更新DIV中的文本(标识为“ notification” ),以及回显的通知标题。

有关包含方法的更多信息:
-https://www.w3schools.com/jsref/met_win_setinterval.asp
-http://api.jquery.com/html/
-http://api.jquery.com/jQuery.Ajax/