我想创建一个node.Js脚本来捕获这些插入并使用Socket.io将通知推送到连接的客户端.到目前为止,我正在使用node-postgres模块ListEN到通道,但似乎ListEN查询在大约10-15秒后超时并停止捕获插入.我可以在超时发生时查询新的监听,但我不确定如何正确实现延续.
这是我的postgresql通知程序:
CREATE FUNCTION article_insert_notify() RETURNS trigger AS $$BEGIN NOTIFY "article_watcher"; RETURN NulL;END;$$LANGUAGE plpgsql;
触发:
CREATE TRIGGER article_insert_triggerAFTER INSERT ON articleFOR EACH ROW EXECUTE PROCEDURE article_insert_notify();
而node.Js代码:
var pg = require ('pg'),pgConnection = "postgres://user:pass@localhost/db"pg.connect(pgConnection,function(err,clIEnt) { clIEnt.query('ListEN "article_watcher"'); clIEnt.on('notification',function(data) { console.log(data.payload); });});
如何确保全职ListEN或如何捕获这些超时以重新发出侦听查询?或者,node-postgres以外的模块可能提供更合适的工具吗?
我在node-postgres repo上得到了我的问题的答案.引用Brianc:pg.connect is use to create pooled connections. Using a connection
pool connection for Listen events really isn’t supported or a good
IDea though.
[…]
To ‘Listen’ a connection by deFinition must stay open permanently. For
a connection to stay open permanently it can never be returned to the
connection pool.
在这种情况下,正确的监听方式是使用独立客户端:
var pg = require ('pg'),pgConnectionString = "postgres://user:pass@localhost/db";var clIEnt = new pg.ClIEnt(pgConnectionString);clIEnt.connect();clIEnt.query('ListEN "article_watcher"');clIEnt.on('notification',function(data) { console.log(data.payload);});总结
以上是内存溢出为你收集整理的postgresql – 使用node-postgres进行LISTEN查询超时?全部内容,希望文章能够帮你解决postgresql – 使用node-postgres进行LISTEN查询超时?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)