我试图连接到postgres数据库。如果连接()需要超过1/2秒,我只是想超时并假设它不可用。不幸的是,如果我将配置更改为无法访问的主机/端口,我会在获得ETIMEDOUT之前看到大约15秒的挂起时间。在下面的代码片段示例中,我预计它会100%超时,因为连接到任何数据库,无论是否可以访问,都需要花费超过1毫秒的时间,在idleTimeoutMillis中指定。
// npm install pg
var pg = require("pg");
var config = {
"host": "myAWS-RDSinstance",
"port": 5432,
"database": "my_db",
"user": "postgres",
"password": "foobar",
"idleTimeoutMillis": 1 // one millisecond = should timeout every time
};
var pool = new pg.Pool(config );
pool.connect(function(err, client, done){
if(err) {
return console.error('error fetching client from pool', err);
}
console.log("connected. attempting query.");
client.query("SELECT COUNT(*) FROM my_table", function(err, result){
done(); // release client to pool
if(err) throw err;
console.log(result.rows[0]);
});
});
答案 0 :(得分:0)
事实证明,您需要为池的流对象设置超时,而不是池本身的超时。下面的代码将超时并销毁流,如果它打开超过半秒。
// npm install pg
var pg = require("pg");
var net = require("net");
var stream = new net.Stream();
stream.setTimeout(500, function(err, data){
console.log("Reached timeout after half a second");
stream.destroy();
});
var config = {
"host": "myAWS-RDSinstance",
"port": 5432,
"database": "my_db",
"user": "postgres",
"password": "foobar",
"stream": stream
};
var pool = new pg.Pool(config );
pool.connect(function(err, client, done){
if(err) {
return console.error('error fetching client from pool', err);
}
console.log("connected. attempting query.");
client.query("SELECT COUNT(*) FROM my_table", function(err, result){
done(); // release client to pool
if(err) throw err;
console.log(result.rows[0]);
});
});