Mysql 有没有更好的方法在不使用setInterval()函数的情况下侦听节点JS中的表更改
我正在学习与Mysql 有没有更好的方法在不使用setInterval()函数的情况下侦听节点JS中的表更改,mysql,node.js,sockets,setinterval,Mysql,Node.js,Sockets,Setinterval,我正在学习与Codeigniter集成的Node JS。这个过程运行得非常完美 当数据库(MySql)中发生某些更改时,我会显示一些实时通知。 现在我正在使用setInterval()函数,时间为5秒。这将在每5秒内调用DB查询 没有setInterval()功能,有没有更好的方法来监听数据库更改? 我的代码示例是 io.on('connection', function(socket){ setInterval(check_new_notification, 5000); }); s
Codeigniter
集成的Node JS
。这个过程运行得非常完美
当数据库(MySql)中发生某些更改时,我会显示一些实时通知。
现在我正在使用setInterval()
函数,时间为5秒。这将在每5秒内调用DB查询
没有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
- 如果发生了某些事件,请将
状态设置为true
- 读取Node.js中的
状态
- 如果为true:执行选择并将
状态设置为
false
- 如果错误:什么也不做
确保您的操作是原子的->使用事务。您应该在创建通知的地方实现通知功能。例如,当插入数据库行时,让应用程序将消息推送到队列中。然后,应用程序可以订阅队列,并在插入新行时进行更新。您也可以选择通过消息队列发送完整的通知。MySQL是否支持此类实时通知?作为补充说明,您可能不必通过多种方式测试变量的真实性()。一个简单的
if(shouldbe&&!shouldnotbe)
应该可以让代码更具可读性。如果他控制将数据推送到DB服务器的代码,这是一个很好的建议;从他的问题上我不清楚。该应用程序可能正在监视另一个(或多个)应用程序正在使用的数据库。