给定以下node.js
+oriento
示例代码,在长时间不活动后第一次进行DB查询时,我遇到了超时[OrientDB.ConnectionError [2]: read ETIMEDOUT]
的问题。在超时错误之后,连接会以某种方式重新初始化,下一个查询运行良好。
var oriento = require("oriento"),
server = oriento({...}),
db = server.use("users");
var getData = function(statement, opts, callback) {
db.query(statement, opts).then(function(data) {
callback(null, data);
}).catch(callback);
};
所以我有以下问题:
- 这是正确的方法吗?还是每次进行查询时都应该调用
oriento({...}).use("users")
,而不是重用连接对象 - 如果这是正确的方式,为什么不自动验证和刷新连接
- 我如何手动检查我不会超时(即验证连接)并强制刷新连接
有什么比以下相当丑陋的破解更好的建议吗?通过每分钟ping DB来保持传输套接字?
setInterval(function(db) {
db.query("select from user").then(function(data) {
console.log("still alive");
}).catch(function(err) {
console.error(err);
});
}, 60000, db);