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 の全体的なアイデアを打ち負かすためです。また、ajax 呼び出しで setTimeout を使用することもできます。


しばらく考えた後、リアルタイム ビューに最も効率的であると思われるこのプロセスを思いつきました。添付を参照してください。あなたの考えを教えてください!ここに画像の説明を入力

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 に答える