每当更新数据库时,socket.io都会推送数据

时间:2014-12-12 13:38:25

标签: php mysql node.js socket.io

我正在编写一个websocket应用程序,只要数据库条目发生变化,它就会将数据推送到我的php文件中。现在,作为一个非常基本的开始,我设置了一个间隔计时器,并且每20秒推送一次到客户端,不管是否有变化(这些字段只是为了玩 - 密码......) :

服务器端:

setInterval(pushData, 20000);

function pushData() {
    connection.query('SELECT * FROM testtable WHERE username="michael"', function(err,rows,fields) {
       if (err) throw err;
        io.emit('newdata', rows[0].password);

    });
}

CLIENT PHP SCRIPT:

socket.on('newdata', function(msg) {
    var data = document.getElementById('dataentries');
    data.innerHTML = msg;
    });

仅当数据库条目发生变化时,查询和更新的最佳实践方法是什么?我可以设置从mysql到node.js的触发器吗?

2 个答案:

答案 0 :(得分:2)

最简单的方法也是合法的方法,首先查询数据,检查数据是否已更改,然后进行更改并向客户端发送消息。如果没有改变,请不要进行更新。

答案 1 :(得分:2)

假设您在服务器应用程序中使用ORM - 我会将广播逻辑放入POST_SAVE挂钩。

如果您不拥有该应用程序,但可以访问数据库配置 - 这就是诀窍。

  1. 启用查询记录(考虑可能的性能降级,所以我可能会在副本实例上配置它)
  2. 在您的脚本中 - 查看日志文件中的更改,可能会在更改时解析它以检查更新的表等。
  3. 基于上述逻辑 - 广播事件