Tôi có một bảng "bài viết" trên cơ sở dữ liệu Postgresql 9.1 và một trình kích hoạt thông báo một kênh trên mỗi chèn.LISTEN thời gian chờ truy vấn với nút-postgres?
Tôi muốn tạo tập lệnh node.js để nắm bắt các chèn đó và đẩy thông báo cho khách hàng được kết nối bằng Socket.io. Cho đến nay tôi đang sử dụng mô-đun nút-postgres để LISTEN vào kênh nhưng có vẻ như lần truy vấn LISTEN ra sau khoảng 10-15 giây và ngừng bắt các chèn. Tôi có thể truy vấn một bản nghe mới khi thời gian chờ xảy ra, nhưng tôi không chắc chắn làm thế nào để thực hiện đúng việc tiếp tục.
Dưới đây là thủ tục thông báo postgresql của tôi:
CREATE FUNCTION article_insert_notify() RETURNS trigger AS $$
BEGIN
NOTIFY "article_watcher";
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
Trigger:
CREATE TRIGGER article_insert_trigger
AFTER INSERT ON article
FOR EACH ROW EXECUTE PROCEDURE article_insert_notify();
Và mã Node.js:
var pg = require ('pg'),
pgConnection = "postgres://user:[email protected]/db"
pg.connect(pgConnection, function(err, client) {
client.query('LISTEN "article_watcher"');
client.on('notification', function(data) {
console.log(data.payload);
});
});
Làm thế nào tôi có thể đảm bảo một fulltime LISTEN hoặc làm thế nào tôi có thể bắt những thời gian chờ đó để phát hành lại một truy vấn nghe không? Hoặc có thể một mô-đun khác ngoài nút-postgres cung cấp các công cụ thích hợp hơn để làm như vậy?
Sử dụng [pg-lời hứa] (https://github.com/vitaly-t/pg-promise) , ví dụ đầy đủ với các giải thích: [LISTEN/NOTIFY] (https://github.com/vitaly-t/pg-promise/wiki/Learn-by-Example#listen--notify) –