使用 Node.js 跟踪对 MySQL 表的更改
Posted
技术标签:
【中文标题】使用 Node.js 跟踪对 MySQL 表的更改【英文标题】:Track Changes to MySQL table using Node.js 【发布时间】:2012-01-07 00:05:44 【问题描述】:我正在尝试将 node.js 应用程序集成到现有的 php/mysql 系统中。 node-mysql
用于允许 node.js 访问 MySQL 数据库。 MySQL 数据库中名为 tableA
的表每 10 分钟更新一次新数据。
问题:使用节点,我需要节点服务器在tableA
更新时不断检查tableA
的更改。有什么好的方法可以做到这一点?
我在想如果我使用setInterval(checkDb(tableA), 10*60*1000)
,或者无限循环,checkDb
query 函数可能与数据库更新不一致。
我也碰巧在使用socket.io
,所以如果 PHP 甚至可以向 node.js 发送消息,那么 PHP 系统将emit('dbUpdated')
发送到节点服务器是否是一个好方法?
节点代码
var dbCheckQueue = function(callback)
client.query('SELECT * from tableA',
function(error, results, fields)
if error
throw error;
callback(results);
);
// 10mins-interval checking of table
setInterval(function()
dbCheckQueue(function(results)
console.log('Fresh meat!')
);
, 10*60*1000);
【问题讨论】:
【参考方案1】:理想情况下,您会在完成后从进行更新的地方触发事件。
由于您使用的是套接字,因此您可以创建一个“事件”连接或类似的连接(验证或其他一些方法来表明它正在连接以触发事件),这将连接到您的套接字并触发更新和断开连接。只要您能够创建连接,无论平台如何,都可以从任何地方调用它。连接后,脚本将发送您想要触发的任何命令并断开/完成更新过程。
您可以直接从进行更新的位置执行此操作,也可以使用 sys_exec() 在 mysql 上设置触发器以执行与上述相同的另一个脚本。
【讨论】:
如何从 PHP 中触发它?也许只是一个简单的方法,因为我只需要发送一条单向消息。 您将使用 socket_connect (php.net/manual/en/function.socket-connect.php) 和相关函数 (socket_send) 来连接并发送您的消息。以上是关于使用 Node.js 跟踪对 MySQL 表的更改的主要内容,如果未能解决你的问题,请参考以下文章
Node.js实现对mysql数据库的crud时报加密方式错误解决方案