我自己设置了一个带有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的整个想法,我也可以使用带有ajax调用的setTimeout。
经过一番思考后,我想出了一个我认为对于实时视图来说效率最高的过程,请参阅附件。请让我知道您的想法!
答案 0 :(得分: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);
这样您就不需要轮询。