Javascript 向特定的在线用户发送通知

Javascript 向特定的在线用户发送通知,javascript,php,windows,notifications,Javascript,Php,Windows,Notifications,我编写了一些代码,在特定情况下,当特定用户在线时,应该向他们发送推送通知。 我需要帮助优化和修复这个问题,因为它只在某些时候起作用,我相信这会给我的服务器带来很大的损失 这个工作的系统是一个票证系统。当分配了一个新的票证时,它应该向任何具有管理员权限的用户发送推送通知,然后当用户被“分配”到票证时,它还应该向他们发送推送通知。我在程序向同一用户发送多个通知时遇到了一些问题,但能够解决,但现在它只发送了一些通知(我无法找到它实际工作的模式) 这是我的密码: Javascript,实际通知:

我编写了一些代码,在特定情况下,当特定用户在线时,应该向他们发送推送通知。 我需要帮助优化和修复这个问题,因为它只在某些时候起作用,我相信这会给我的服务器带来很大的损失

这个工作的系统是一个票证系统。当分配了一个新的票证时,它应该向任何具有管理员权限的用户发送推送通知,然后当用户被“分配”到票证时,它还应该向他们发送推送通知。我在程序向同一用户发送多个通知时遇到了一些问题,但能够解决,但现在它只发送了一些通知(我无法找到它实际工作的模式)

这是我的密码:

Javascript,实际通知:

    <script>
function notifyMe() {
  if (!Notification) {
    alert('Desktop notifications not available in your browser. Try Chromium.'); 
    return;
  }

  if (Notification.permission !== "granted")
    Notification.requestPermission();
  else {
    var notification = new Notification('You\'ve been added to a ticket!', {
      icon: 'images/trg.jpg',
      body: "You have just been added to a ticket, please check the ticket system for more details.",
      priority: "2",
    });

    notification.onclick = function () {
      window.open("http://example");      
    };

  }

}
</script>
<script>
function notifyAdmin() {
  if (!Notification) {
    alert('Desktop notifications not available in your browser. Try Chromium.'); 
    return;
  }

  if (Notification.permission !== "granted")
    Notification.requestPermission();
  else {
    var notification = new Notification('A new ticket has been added!', {
      icon: 'images/trg.jpg',
      body: "A new ticket has been added!",
      priority: "2",
    });

    notification.onclick = function () {
      window.open("http://example");      
    };

  }

}
</script>

函数notifyMe(){
如果(!通知){
警报('您的浏览器中没有桌面通知。请尝试使用Chromium');
返回;
}
if(Notification.permission!=“已授予”)
Notification.requestPermission();
否则{
var notification=新通知('您已添加到票证!'{
图标:“images/trg.jpg”,
正文:“您刚刚被添加到票证中,请查看票证系统以了解更多详细信息。”,
优先次序:“2”,
});
notification.onclick=函数(){
窗口打开(“http://example");      
};
}
}
函数notifyAdmin(){
如果(!通知){
警报('您的浏览器中没有桌面通知。请尝试使用Chromium');
返回;
}
if(Notification.permission!=“已授予”)
Notification.requestPermission();
否则{
var notification=new notification('已添加新票证!'{
图标:“images/trg.jpg”,
正文:“添加了一张新票!”,
优先次序:“2”,
});
notification.onclick=函数(){
窗口打开(“http://example");      
};
}
}
我的php、所有的if语句以及它应该发送的时间等等。通知是通过一个函数(sendNotify())发送的,它实际上只是从以前调用JavaScript

$configs = include("config.php");

        if (session_status() == PHP_SESSION_NONE) {
            session_start();
        }

        $dsn = 'mysql:dbname='.$configs['SQL-Database'].';host='.$configs['SQL-Host'].''; 
        $user = $configs['SQL-User']; 
        $password = $configs['SQL-Pass']; 

        $con = mysqli_connect($configs['SQL-Host'], $configs['SQL-User'], $configs['SQL-Pass'], $configs['SQL-Database']) or die("Error " . mysqli_error($con));
        $checkTickets = mysqli_query($con, "SELECT * FROM tickets WHERE notified='0'");
        $tcheckTickets = mysqli_num_rows($checkTickets);

        if(($tcheckTickets > 0) && ($_SESSION['Level'] >= 2)) {
            try { 
                $db = new PDO($dsn, $user, $password); 
            } catch (PDOException $e) { 
                echo 'Connection failed: ' . $e->getMessage(); 
            }

            $st = $db->prepare('SELECT UniqueID FROM tickets WHERE notified=0'); 
            $st->execute(); 

            $result = $st->fetchAll(PDO::FETCH_ASSOC); 

            foreach($result as $d){ 
                echo $d['UniqueID'] . "<br/>"; 
                $id = $d['UniqueID']; 
                $st = $db->prepare("UPDATE tickets SET notified=1 WHERE UniqueID=$id"); 
                sendSound();
                sendNotifyAdmin();
                sleep(3);
                $st->execute(); 
            }
        }

        $checkTickets2 = mysqli_query($con, "SELECT * FROM tickets WHERE notified='1'");
        $tcheckTickets2 = mysqli_num_rows($checkTickets2);

        if($tcheckTickets2 > 0) {
            try { 
                $db = new PDO($dsn, $user, $password); 
            } catch (PDOException $e) { 
                echo 'Connection failed: ' . $e->getMessage(); 
            }

            $st = $db->prepare('SELECT * FROM tickets WHERE notified=1'); 
            $st->execute(); 

            $result = $st->fetchAll(PDO::FETCH_ASSOC); 

            foreach($result as $d){ 
                if(strcmp($d['Assigned'],$_SESSION['Name']) == 0) {
                    echo $d['UniqueID'] . "<br/>"; 
                    $id = $d['UniqueID']; 
                    $st = $db->prepare("UPDATE tickets SET notified=2 WHERE UniqueID=$id");
                    sendSound();
                    sendNotify();
                    sleep(3);
                    $st->execute(); 
                }
            }           
        }
$configs=include(“config.php”);
if(session_status()=PHP_session_NONE){
会话_start();
}
$dsn='mysql:dbname='。$configs['SQL-Database'];主机='.$configs['SQL-host'].';
$user=$configs['SQL-user'];
$password=$configs['SQL-Pass'];
$con=mysqli_connect($configs['SQL-Host']、$configs['SQL-User']、$configs['SQL-Pass']、$configs['SQL-Database'])或die(“Error”。mysqli_Error($con));
$checkTickets=mysqli_query($con,“从通知的票据中选择*”='0');
$tcheckTickets=mysqli_num_行($checkTickets);
如果($tcheckTickets>0)和($_会话['Level']>=2)){
试试{
$db=新PDO($dsn,$user,$password);
}渔获量{
回显“连接失败:”。$e->getMessage();
}
$st=$db->prepare('selectuniqueid FROM tickets WHERE notified=0');
$st->execute();
$result=$st->fetchAll(PDO::FETCH_ASSOC);
foreach(结果为$d){
echo$d['UniqueID']。“
”; $id=$d['UniqueID']; $st=$db->prepare(“更新通知单集=1,其中UniqueID=$id”); sendSound(); sendNotifyAdmin(); 睡眠(3); $st->execute(); } } $CHECKTICKTS2=mysqli_查询($con,“从通知的票证中选择*”='1'); $tcheckTickets2=mysqli_num_行($checkTickets2); 如果($tchecktices2>0){ 试试{ $db=新PDO($dsn,$user,$password); }渔获量{ 回显“连接失败:”。$e->getMessage(); } $st=$db->prepare('SELECT*FROM tickets WHERE notified=1'); $st->execute(); $result=$st->fetchAll(PDO::FETCH_ASSOC); foreach(结果为$d){ if(strcmp($d['Assigned'],$_SESSION['Name'])==0){ echo$d['UniqueID']。“
”; $id=$d['UniqueID']; $st=$db->prepare(“更新通知单集=2,其中UniqueID=$id”); sendSound(); sendNotify(); 睡眠(3); $st->execute(); } } }
这就是它目前的工作方式:

提交票据时,在数据库的“通知”列中为其指定0。我之前输入的脚本每隔几秒钟刷新一次,首先检查
notified
等于0的任何票证,如果找到任何票证,它应该向任何具有管理员权限的在线用户发送通知。然后,脚本检查是否有任何
通知的
等于1,并向分配给票据的任何用户发送消息,然后在
通知的
等于2时停止

我绝对愿意接受任何能让这变得更容易、更少负载并能正常工作的系统。我也愿意接受关于如何改进当前代码以更好地工作的建议