0

我已经使用 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 调用一起使用。


经过一番思考,我想出了这个我认为对于实时视图最有效的过程,请参阅附件。请让我知道你在想什么!在此处输入图像描述

4

1 回答 1

0

我正在使用 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);

这样你就不需要轮询了。

于 2012-09-12T14:51:01.160 回答