2011-11-26 39 views
3

我正在尝试将node.js应用程序集成到现有的PHP/MySQL系统中。 node-mysql用于允许node.js访问MySQL数据库。 MySQL数据库中名为tableA的表格每10分钟更新一次新数据。使用Node.js修改MySQL表格

问题:使用节点时,我需要节点服务器连续检查tableA,以便更新tableA时得到更新。什么是实现这一目标的好方法?

我在想如果我使用setInterval(checkDb(tableA), 10*60*1000)或无限循环,则checkDb查询函数可能与数据库更新不一致。

我也恰好在使用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); 

回答

3

理想情况下,你会引发从不断更新正在从完成后取得的该事件。

由于您使用套接字,您可以创建一个“事件”连接或类似的(认证或其他方法来表明它正在连接以触发一个事件),它将连接到您的套接字并触发更新和断开连接。只要您能够创建连接,就可以从任何地方调用此平台,而无需考虑平台。一旦连接,脚本将发送您想要触发的任何命令,并断开/完成更新过程。

您可以直接从更新的位置执行此操作,也可以使用sys_exec()在mysql上设置触发器以执行与上述操作相同的另一个脚本。

+2

如何从PHP触发它?也许只是一个简单的方法,因为我需要的只是发送单向消息。 – Nyxynyx

+1

你可以使用socket_connect(http://www.php.net/manual/en/function.socket-connect.php)和相关函数(socket_send)来连接和发送消息。 – savageguy