有没有更好的方法在不使用 setInterval() 函数的情况下监听 Node JS 中的 table 变化

Is there a better way to listen table changes in Node JS without using setInterval() function

我正在学习 Node JSCodeigniter 的集成。该过程运行完美。

当数据库发生某些变化时,我会显示一些实时通知(MySql)

现在我正在使用 setInterval() 函数,时间为 5 秒。这将每 5 秒调用一次数据库查询。

没有 setInterval() 功能,是否有更好的监听数据库变化的方法?

我的代码示例是

io.on('connection', function(socket){
    setInterval(check_new_notification, 5000);
});

socket.on('check_new_notification', function(user,time){
    check_new_notification(user,time);
});

function check_new_notification(user,time){
    if(user == '' || typeof user == 'undefined' || user == null){
        user = user_id;
    }
    if(time == '' || typeof time == 'undefined'){
        time=0;
    }
    if(user != '' && typeof user != 'undefined' && user != null){
        db.getDetails(user,time,mysql,pool,function(error,result,row_count){
            io.emit('trigger_alert',result, row_count);
        });
    }
}

请告诉我是否有更好的方法来监听数据库的变化。任何帮助都将不胜感激。

在您的案例中无法避免主动轮询。 所以你的做法基本上是正确的。

要提高性能,请执行以下操作:

  • 创建一个带有布尔字段 status
  • 的 table
  • 如果发生了值得通知的事情,请将 status 设置为真
  • 阅读 status Node.js
  • 如果为真:执行 select 并将 status 设置为 false
  • 如果为假:什么都不做

确保您的操作是原子的 -> 使用事务。

您应该在创建通知的地方实施通知功能。例如,让您的应用程序在插入数据库行后将消息推送到队列。然后,您的应用程序可以订阅队列并在插入新行时进行更新。您可以选择通过消息队列发送完整的通知。