【问题标题】:Live Database View实时数据库视图
【发布时间】:2012-09-04 15:19:11
【问题描述】:

我已经为自己设置了一个带有 mysql 节点模块的 NodeJS 和 socket.io 服务器,并且一切正常。

这是我的脚本:

// create an http server listening on port 8100
var io = require('socket.io').listen(8100);
var mysql = require('mysql');

var connection = mysql.createConnection({
host     : '127.0.0.1',
user     : 'user',
password : 'password',
database : 'mybase'
});

connection.connect(function(e){
if(e)
{
    console.log('Database connection failed. ('+e+')') ;
}
else
{
    console.log('Database connection successful!') ;
}
})

connection.query('SELECT id, name FROM entity_details WHERE id = 4626', function(e, rows) {
if(e)
{

}
else
{
    console.log(decodeURIComponent(rows[0]['name'])) ;
}
 });

// listen on new connections
io.sockets.on('connection', function (socket) {

// listen on an event called "eventA"
socket.on('eventA', function(data) {
    // send "eventA" to all clients, except the sender
    io.sockets.emit('eventA', data);

});

});

我的问题是如何让 MySQL “告诉” nodeJS/Socket.io 列中的值已更改或新行已更新?所以实际上我可以实时查看数据库中我想要的任何表、列等?

我想我不想每秒都轮询数据库,因为这违背了 socket.io 的整个想法,我不妨将 setTimeout 与 ajax 调用一起使用。


经过一番思考,我想出了这个过程,我认为这对于实时视图来说是最有效的,请参阅附件。请告诉我你的想法!

【问题讨论】:

    标签: mysql ajax node.js socket.io


    【解决方案1】:

    我正在使用 postgresql,但由于 mysql 支持触发器,它应该可以工作。

    在更新时在每个表中放置一个触发器 订阅数据库模块上每个触发器的事件

    for (notification in notifications) { var n =notifications[notification]; pgclient.on('updated', n.handler); pgclient.query("LISTEN "+n.channel); } 发回消息

    socket.emit('eventA',dbMsg.payload);

    这样你就不需要投票了。

    【讨论】:

      猜你喜欢
      • 2016-09-11
      • 2020-06-06
      • 2018-11-19
      • 2017-01-10
      • 2011-11-27
      • 1970-01-01
      • 2021-09-29
      • 2021-09-13
      • 1970-01-01
      相关资源
      最近更新 更多