當我在我的服務器(運行node.js應用程序)上運行「lsof | grep node」時,我獲得了大約1000多行(db連接到端口9160)。每行看起來像這樣:Node.js lsof - 許多開放的數據庫連接
node 17006 root 160u IPv4 1362100969 0t0 TCP localhost:47813->localhost:9160 (ESTABLISHED)
這是一個測試node.js服務器,做一些非常簡單的事情。 (用Helenus模塊將請求記錄到Cassandra DB)
我很驚訝有這麼多的開放式連接,當時肯定不應該有1-2個連接。
這是否意味着我不能在Node應用程序中正確結束我的數據庫連接?我的代碼如下。謝謝。
var express = require('express')
, routes = require('./routes')
, app = express.createServer();
app.configure(function(){
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
});
process.on('uncaughtException', function (err) {
logger.error('Caught exception: ' + err);
});
function respond_test(req, res, next) {
var q = JSON.parse(req.query.q);
insert_db(q);
res.send('OK');
}
function insert_db(q) {
var helenus = require('helenus'),
pool = new helenus.ConnectionPool({
hosts : ['localhost:9160'],
keyspace : 'Test',
timeout : 3000
});
pool.on('error', function(err){
logger.error(err.name, err.message);
});
//makes a connection to the pool, this will return once there is at least one
//valid connection, other connections may still be pending
pool.connect(function(err, keyspace){
if(err){ throw(err); }
keyspace.get('Test', function(err, cf){
if(err){ throw(err); }
cf.insert(Date.now(), q, function(err){
if(err){ throw(err); }
});
});
});
pool.close();
}
app.get('/test', respond_test);
app.listen(80);
您可以發佈您在您的應用中使用的代碼嗎? – 2012-03-20 18:07:00
修改了一下這個問題。我看到它有很多連接到數據庫(端口9160),而不是連接到Node.js服務器。謝謝 – awaage 2012-03-20 19:09:01