Я построил систему уведомлений с node-postgres и socket.io.Система работает нормально, однако, я получаю сообщение об ошибке при запуске.
оставшиеся слоты подключения зарезервированы для подключений суперпользователя без репликации
Я подозреваю, что это связано сне освобождает клиента обратно в пул.
Pool.connect()
.then(client => {
return client.query('LISTEN "new_notification"')
.then(result => {
client.on('notification', data => {
// Handle the notification
});
// Should release here
})
.catch(e => {
// Should release here
this.log(e.message, 'error');
});
})
.catch(e => {
this.log(e.message, 'error')
});
Однако даже после добавления client.release()
в местах, где отмечены // Should release here
, я все равно получаю сообщение об ошибке.Тем не менее, уведомление все еще работает.
Когда сервер запускается, он создает один HeyListen
объект, в котором также создается Pool
выше.
Теперь вышеприведенная ошибка обычно происходит, когда сервер запускается и залит соединениями.Есть 6 сайтов, которые обрабатывают соединения с пользователями.Каждый пользователь создает новое соединение с сервером socket.io, и когда событие disconnecting
запускается через socket.io, они удаляются из списка подключенных пользователей.Каждый раз, когда пользователь подключается, он запускает запрос к postgres, если у него есть ожидающие уведомления.Вот объект запроса:
const conn = this.getConnectionType(pool);
conn.connect()
.then(client => {
return client.query(query_string, params)
.then(result => {
client.release();
callback(null, result);
})
.catch(error => {
client.release();
callback(error, null);
});
})
.catch(error => {
callback(error, null);
});
Если я запускаю Select * From pg_stat_activity
на моем сервере psql, я вижу:
![enter image description here](https://i.stack.imgur.com/5wwAs.png)
Я думалиспользование client.release()
должно было удалить эти соединения?При повторном выполнении запроса выше отображаются разные результаты запроса, поэтому некоторые из них удаляются.Это проблема нехватки max_connections
?Если да, то стоит ли увеличить это число для моего варианта использования?