我正在使用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"});
}
但是现在我被db_open函数抛出了connection closed
我真的不明白为什么我的创建db
和我的代码调用db_open
之间的连接正在关闭。
你知道发生了什么吗?
谢谢:)
(对不起,如果我的英语不是很好)
修改的 我发现这个website解释说问题是由于tcp_keepalive时间过长造成的。这个解决方案的问题是我的工作站(Cloud 9)。我没有权限访问文件/ proc / sys / net / ipv4 / tcp_keepalive_time
答案 0 :(得分:1)
我认为您的问题与TCP keep-alive无关。就像错误消息所说的那样,您只是尝试多次打开相同的连接(每次调用insert方法时)。在第一次调用open()
之前,不要每次调用insert()
,只需调用一次,并确保回调返回。您可以在同一连接上执行的同时插入数量没有硬性限制,因为它们都是异步的。