Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 每当更新数据库时,socket.io推送数据_Php_Mysql_Node.js_Socket.io - Fatal编程技术网

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

Php 每当更新数据库时,socket.io推送数据,php,mysql,node.js,socket.io,Php,Mysql,Node.js,Socket.io,我正在编写一个websocket应用程序,每当数据库条目发生变化时,它都应该将数据推送到我的php文件中。现在,作为一个非常基本的开始,我设置了一个间隔计时器,并每20秒向客户机推送一次,无论是否有更改(字段仅用于播放--password…): 服务器端: setInterval(pushData, 20000); function pushData() { connection.query('SELECT * FROM testtable WHERE username="michae

我正在编写一个websocket应用程序,每当数据库条目发生变化时,它都应该将数据推送到我的php文件中。现在,作为一个非常基本的开始,我设置了一个间隔计时器,并每20秒向客户机推送一次,无论是否有更改(字段仅用于播放--password…):

服务器端:

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);

    });
}
客户端PHP脚本:

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

只有在数据库条目发生更改时才进行查询和更新的最佳实践方法是什么?我可以设置从mysql到node.js的触发器吗?

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

假设您在服务器应用程序中使用
ORM
,我会将广播逻辑放入
POST\u SAVE
钩子中

如果您不拥有该应用程序,但可以访问数据库配置,那么技巧如下

  • 启用查询日志记录(考虑可能的性能降级,因此我可能会在副本实例上进行配置)
  • 在您的脚本中-查看日志文件的更改,可能会在更改时对其进行解析,以检查更新了哪个表等
  • 基于上述逻辑-广播事件

  • 我也是这么想的。但我仍然必须每隔20秒左右查询数据库。难道没有一种方法可以消除许多查询吗?当涉及到生产时,我必须查询一个包含20000个条目的数据库。添加一些好的索引,那么20k行就不是问题了。有了好的索引,您可以在短时间内查询数百万行。查看mysql文档,了解如何向列添加索引。基本上,它只是mysql对表进行排序的一个帮助,因此它可以更快地检索您搜索的行。