问题描述
每当我的postgres db上的某个表被更改时,我都试图让前端监视事件。
Postgres事件完全可以触发,我可以通过Socker.io连接将其中继到,但是我遇到了可靠性问题。我的服务器上出现'c'
错误,并且套接字通常不会发出和捕获事件。我认为这与我连接到Socket / db客户端的方式有关。
pg配置:
'a'
index.js
'b'
我收到某些表更改的通知,但不一致。
解决方法
在任何通知发生之前,您将立即release
使用获取的数据库客户端,并且每次套接字断开连接并尝试运行UNLISTEN
命令时,都会收到错误消息。在释放的客户端上,该客户端的连接在30秒后关闭。
相反,使用
socket.on("disconnect",async () => {
try {
await client.query('UNLISTEN update_table');
} finally {
release();
}
});
顺便说一句,我建议不要为每个socket.io客户端获取一个新的数据库连接,因为该数据库太有价值了。相反,为您的应用程序创建一个客户端(您甚至可能不需要池),让它监听update_table
事件(可能仅在连接套接字时),然后对每个事件broadcast当前连接的套接字。