我正在研究使用 node-mongodb-native 模块在 mongoDb 数据库中插入文档的功能。一切正常,除非我连续调用插入多个文档。我使用for
循环来测试我的函数如何同时对多个文档插入做出反应。
var server = new Server("xxx.xxx.xxx.xxx", 27017, {auto_reconnect: true, poolSize: 100});
var db = new Db("testDb", server, {safe: false});
module.exports.insert = function(document){
var database;
function db_open(err, db_local){
if(err) throw err;
database = db_local;
database.collection("rooms", handle_insert);
}
function handle_insert(err, collection){
if(err) throw err;
collection.insert(document);
database.close();
}
db.open(db_open);
};
for(var i=0; i<100; i++){
module.exports.insert({name : "test"});
}
当我运行这段代码时,我得到了错误为了解决这个问题,db object already connecting, open cannot be called multiple times
我决定在每次调用函数时创建一个新的实例:Server
Db
module.exports.insert = function(document){
var database;
var server = new Server("xxx.xxx.xxx.xxx", 27017, {auto_reconnect: true, poolSize: 100});
var db = new Db("testDb", server, {safe: false});
function db_open(err, db_local){
if(err) throw err;
database = db_local;
database.collection("rooms", handle_insert);
}
function handle_insert(err, collection){
if(err) throw err;
collection.insert(document);
database.close();
}
db.open(db_open);
};
for(var i=0; i<100; i++){
module.exports.insert({name : "test"});
}
但是现在我connection closed
被 db_open 函数抛出了,我真的不明白为什么我的连接在我创建的那一刻db
和我的代码调用的那一刻之间关闭db_open
。
你知道发生了什么吗?
谢谢 :)
(对不起,如果我的英语不是很好)
编辑 我发现这个网站解释说问题是由太长的 tcp_keepalive 时间引起的。这个解决方案的问题是我的工作站(Cloud 9)。我无权访问文件 /proc/sys/net/ipv4/tcp_keepalive_time