มุมมองฐานข้อมูลสด

ฉันได้ตั้งค่าตัวเองเป็นเซิร์ฟเวอร์ NodeJS และ socket.io ด้วยโมดูลโหนด mysql และทำงานได้ดี

นี่คือสคริปต์ของฉัน:

// 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 เช่นกัน


หลังจากคิดอยู่พักหนึ่งก็เกิดกระบวนการที่คิดว่าจะมีประสิทธิภาพมากที่สุดสำหรับการดูแบบเรียลไทม์ โปรดดูไฟล์แนบ โปรดแจ้งให้เราทราบว่าคุณคิดอย่างไร!ป้อนคำอธิบายรูปภาพที่นี่


person imperium2335    schedule 11.09.2012    source แหล่งที่มา


คำตอบ (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);

วิธีนี้คุณไม่จำเป็นต้องสำรวจความคิดเห็น

person Dslayer    schedule 12.09.2012