具有socket.io和Postgres LISTEN的NodeJS

问题描述

每当我的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当前连接的套接字。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...